分类 PHP 下的文章

一、单引号和双引号转义在PHP的数据存储过程中用得比较多,即往数据库里面存储数据时候需要注意转义单、双引号;

先说几个PHP函数:

1、addslashes — 使用反斜线引用(转义)字符串;

  返回字符串,该字符串为了数据库查询语句等的需要在某些字符前加上了反斜线。这些字符是单引号(')、双引号(")、反斜线(\)与 NUL(NULL 字符)。

一个使用 addslashes() 的例子是当你要往数据库中输入数据时。例如,将名字 O'reilly 插入到数据库中,这就需要对其进行转义。大多数据库使用 \ 作为转义符:O\'reilly。这样可以将数据放入数据库中,而不会插入额外的 \。当 PHP 指令 magic_quotes_sybase 被设置成on 时,意味着插入 ' 时将使用 ' 进行转义。默认情况下,PHP 指令 magic_quotes_gpc 为 on,它主要是对所有的 GET、POST 和 COOKIE 数据自动运行 addslashes()。不要对已经被 magic_quotes_gpc 转义过的字符串使用 addslashes(),因为这样会导致双层转义。遇到这种情况时可以使用函数 get_magic_quotes_gpc() 进行检测。

2、stripslashes — 去掉字符串的反斜杠引用(转义)

  即同addslashes()做相反的工作;

3、get_magic_quotes_gpc --- 检测魔术引用变量是否开启,倘若开启返回1,为开启则返回0;

if (!get_magic_quotes_gpc()) {
    $lastname=addslashes($_POST['lastname']);
} else {
    $lastname=$_POST['lastname' ];
}
echo$lastname;  
$sql="INSERT INTO lastnames (lastname) VALUES ('$lastname')";

二、谈转义实体问题:

我们经常会遇到关于留言板之类的可以让用户输入信息的地方,这些地方都是需要注意的,因为不做转实体之类的话,html代码、script脚本可以轻易的被输入保存,并被其他用户执行;

所以类似用户在输入文本内输入hello之类的,我们尽量要屏蔽掉,否则用户会乱搞,比如调CSS样式等,那样,我们页面将一塌糊涂。废话不多说,这里有几个关于PHP转实体的函数需要详细了解:

1、htmlspecialchars() 转义特别的字符为HTML实体;

'&' (ampersand) becomes '&'
'"' (double quote) becomes '"' when ENT_NOQUOTES is not set.
''' (single quote) becomes ''' only when ENT_QUOTES is set.
'<' (less than) becomes '<'
'>' (greater than) becomes '>'
2、htmlspecialchars_decode()将实体转成HTML代码,函数1的反函数

3、 htmlentities()这个是全部转换html实体,和htmlspecialchars()区别在于,这个函数是转义全部的字符,而htmlspecialchars()仅仅转义上面限定的5个特殊字符!

server {
        listen       8090;
        server_name  127.0.0.1;
        root   /usr/local/var/www/8090;

        location / {
            index  index.php index.html index.htm;
        }
        location ~ \.php$ {
            fastcgi_pass   127.0.0.1:9000;
            fastcgi_index  index.php;
            fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;
            include        fastcgi_params;
        }
    }

brew services restart nginx
chmdo -R 777 /usr/local/var/www/8090
brew services restart php

获取config params.php配置的参数

$id = Yii::$app->params['adminEmail'];
var_dump($id);

获取参数

$post = Yii::$app->request->post('name');
$get = Yii::$app->request->get('name');

设置/获取cache

Yii::$app->cache->set('name','myname');
$name = Yii::$app->cache->get('name');
var_dump($name);

设置/获取session

Yii::$app->session->set('name','mynamsdfse');
$name = Yii::$app->session->get('name');
var_dump($name);

获取随机字符串

$key = Yii::$app->getSecurity()->generateRandomString(15);
var_dump($key);

数据加密

$md5 = md5('string');
$sha1 = sha1('string');
var_dump($md5);
var_dump($sha1);
try...catch
         try {
            $bool = true;
                if(!$bool){
                 throw new \Exception('没有操作权限');
            }
        } catch (\Exception $e) {
            Yii::error('exam-answer:' . $e->getMessage());
            return $this->renderJson(self::ERR_CODE_FAILURE, $e->getMessage());
        }

事务

$transaction = Yii::$app->db->beginTransaction();
try{
    $transaction->commit();
    return true;
 }catch(\Exception $e){
    $transaction->rollBack();
}

json编码/解码

$data = ['id'=>1,'name'=>'lili'];
$data = json_encode($data);
var_dump($data);
$data = json_decode($data,true);
var_dump($data);

数组排序

$data = [
            ['id'=>1,'name'=>'lisi','sort'=>1],
            ['id'=>2,'name'=>'zhangsan','sort'=>2]
];
        usort($data, function($a, $b){
            if ($a['sort'] == $b['sort'])return 0;
            return ($a['sort'] > $b['sort']) ? 1 : -1;
        });
        var_dump($data);

 $data = [
            ['id'=>1,'name'=>'name1','sort'=>1],
            ['id'=>2,'name'=>'name2','sort'=>2],
            ['id'=>3,'name'=>'name3','sort'=>3],
        ];
        $sorts = ArrayHelper::getColumn($data,'sort');
        /**结果集排序,sort_time从小到大排序**/
        array_multisort($sorts, SORT_ASC, $data);
        echo '<pre>';
        var_dump($data);

数组合并

 $data = [
            ['id'=>1,'name'=>'lisi','sort'=>1],
            ['id'=>2,'name'=>'zhangsan','sort'=>2]
        ];
        $data2 = [
            ['id'=>3,'name'=>'li3','sort'=>1],
            ['id'=>4,'name'=>'zhangsan','sort'=>2]
        ];
        //学生显示资源
        $data = ArrayHelper::merge($data,$data2);
        var_dump($data);

比较两个数组不同元素

        $data = ['name','name2'];
        $data2 = ['name','name3'];
        //学生显示资源
        $data = array_diff($data,$data2);
        var_dump($data);

判断某元素是否在数组里

        $data = ['name','name2','name3'];
        $bool = in_array('name',$data);
        var_dump($bool);

判断key是否存在

        $data = ['id'=>1,'name'=>'name'];
        $bool = array_key_exists('ids',$data);
        var_dump($bool);

错误日志

        $student = new Student();
        $student->real_name = 'student';
        $bool =  $student->save();
        if(!$bool){
            \Yii::error(var_export($student->getFirstErrors(), true));
        }

url和参数处理

         $data = [
            'key'=>'ggg',
            'url'=>'http://www.baidu.com'
        ];
        $data = http_build_query($data);
        var_dump($data);
        $data = urlencode($data);
        var_dump($data);

数组与字符串相互转换

        $string = "1,2,3,4,5";
        $array =  $ids = explode(',', $string);
        var_dump($array);
        $array = ['apple','banana','pear'];
        $string = implode(',',$array);
        var_dump($string);

$pdo = new PDO("mysql:host={$DB_Host};dbname={$DB_Database}", $DB_User, $DB_Password);
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$query= 'select movie_douban_id from yp_movie where movie_id > 142432';
$res = $pdo->prepare($query);
$res->execute();
while($row = $res->fetch(PDO::FETCH_ASSOC)){
$boolen = updateMovieInfo($row['movie_douban_id']);
}

$tmp = $pdo->query('select bd_title from yp_ranklist where bd_type = '.$k.' order by bd_sort asc')->fetchAll(PDO::FETCH_ASSOC);
$tmp = array_column($tmp,'bd_title');

$stmt = $pdo->prepare("select * from yp_douban_top order by top_sort asc;");
$stmt->execute();
$data = $stmt->fetchAll(PDO::FETCH_ASSOC);