我以前在我的普通mysql_*连接中有这个:
mysql_set_charset("utf8",$link);
mysql_query("SET NAMES 'UTF8'");
Run Code Online (Sandbox Code Playgroud)
我是否需要它用于PDO?我应该在哪里买到它?
$connect = new PDO("mysql:host=$host;dbname=$db", $user, $pass, array(PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION));
Run Code Online (Sandbox Code Playgroud)
Cob*_*ast 440
您将在连接字符串中拥有它,如:
"mysql:host=$host;dbname=$db;charset=utf8"
Run Code Online (Sandbox Code Playgroud)
但是,在PHP 5.3.6之前,charset选项被忽略了.如果您运行的是旧版本的PHP,则必须执行以下操作:
$dbh = new PDO("mysql:$connstr", $user, $password);
$dbh->exec("set names utf8");
Run Code Online (Sandbox Code Playgroud)
9ni*_*x00 62
在PHP 5.3.6之前,charset选项被忽略.如果您运行的是旧版本的PHP,则必须执行以下操作:
<?php
$dbh = new PDO("mysql:$connstr", $user, $password);
$dbh -> exec("set names utf8");
?>
Run Code Online (Sandbox Code Playgroud)
Jps*_*psy 41
这可能是最优雅的方式.
在PDO构造函数调用中,但避免了错误的charset选项(如上所述):
$connect = new PDO(
"mysql:host=$host;dbname=$db",
$user,
$pass,
array(
PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES utf8"
)
);
Run Code Online (Sandbox Code Playgroud)
对我来说很棒.
Álv*_*lez 16
为了完整起见,实际上有三种方法可以在从PDO连接MySQL时设置编码,哪些可用,取决于您的PHP版本.优先顺序为:
charset DSN字符串中的参数SET NAMES utf8使用PDO::MYSQL_ATTR_INIT_COMMAND连接选项运行SET NAMES utf8手动运行此示例代码实现了所有三个:
<?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);
}
Run Code Online (Sandbox Code Playgroud)
做这三件事可能有点过头了(除非你正在编写一个你打算分发或重用的课程).
| 归档时间: |
|
| 查看次数: |
232582 次 |
| 最近记录: |