您的位置:首页 > 编程语言 > PHP开发

PHP PDO 安全执行 set names utf8 的正确方法

2015-08-22 22:42 615 查看

代码

<?php

define('DB_HOST', 'localhost');
define('DB_SCHEMA', 'test');
define('DB_USER', 'test');
define('DB_PASSWORD', 'test');
define('DB_ENCODING', 'utf8');

$dsn = 'mysql:host=' . DB_HOST . ';dbname=' . DB_SCHEMA;
$options = array(
PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
);

if( version_compare(PHP_VERSION, '5.3.6', '<') ){
if( defined('PDO::MYSQL_ATTR_INIT_COMMAND') ){
$options[PDO::MYSQL_ATTR_INIT_COMMAND] = 'SET NAMES ' . DB_ENCODING;
}
}else{
$dsn .= ';charset=' . DB_ENCODING;
}

$conn = @new PDO($dsn, DB_USER, DB_PASSWORD, $options);

if( version_compare(PHP_VERSION, '5.3.6', '<') && !defined('PDO::MYSQL_ATTR_INIT_COMMAND') ){
$sql = 'SET NAMES ' . DB_ENCODING;
$conn->exec($sql);
}


PDO 注入方法

其他的比如直接执行
set names utf8
是老版本的PHP,因为不支持绑定,所以才只能这样。但存在注入漏洞。

老版本PHP 的 PDO 注入方法,链接:

http://zhangxugg-163-com.iteye.com/blog/1835721 (将PHP升级到最新稳定版本,再使用如上代码,可以解决该注入问题)
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  php pdo Mysql 注入