我对PDO感到有些困惑。它是正确的形式为set属性charset utf8编写这样的函数以及处理数据库错误吗?
<?php
$dsn = 'mysql:dbname=testdb;host=127.0.0.1';
$user = 'dbuser';
$password = 'dbpass';
try {
$dbh = new PDO($dsn, $user, $password array(PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES utf8'));
$dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
} catch (PDOException $e) {
echo 'Connection failed: ' . $e->getMessage();
}
?>
感谢。
答案 0 :(得分:2)
除了简单的语法错误之外,你所做的恰到好处。您错过了逗号。
$dbh = new PDO($dsn, $user, $password ,array(PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES utf8'));
//^----- You missed adding this
答案 1 :(得分:1)
试试这个
$link = new PDO("mysql:host=localhost;dbname=DB;charset=UTF8");
或者这也很好
link = new PDO('mysql:host=myhost;dbname=mydb', 'login', 'password', array(PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES \'UTF8\''));
其他一切都还可以。
答案 2 :(得分:1)
您的设置编码方式仅建议在旧的PHP安装(早于PHP / 5.3.6)中使用,但非常旧 - 我不记得确切的版本,但您必须运行<{1}}手动查询尚未实现SET NAMES
的旧版本。
推荐的方法是DSN itself中的相应参数:
<强>字符集强>
字符集。请参阅字符集概念文档 更多信息。
在PHP 5.3.6之前,这个元素被默默地忽略了。相同 行为可以部分复制
PDO::MYSQL_ATTR_INIT_COMMAND
驱动程序选项
最后,您可以在构造函数中一次设置所有设置。无需单独执行PDO::MYSQL_ATTR_INIT_COMMAND
次呼叫。