Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/247.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP PDO setAttribute和错误处理_Php_Mysql_Pdo_Character Encoding - Fatal编程技术网

PHP PDO setAttribute和错误处理

PHP PDO setAttribute和错误处理,php,mysql,pdo,character-encoding,Php,Mysql,Pdo,Character Encoding,我只是对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'

我只是对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();
}
?>

谢谢。

试试这个

$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\'')); 
其他一切都好。

试试这个

$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\'')); 

其他一切都正常。

除了一个简单的语法错误之外,你所做的一切都是正确的。你漏掉了一个逗号

 $dbh = new PDO($dsn, $user, $password ,array(PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES utf8'));
                                     //^----- You missed adding this

除了一个简单的语法错误,你所做的是正确的。你漏掉了一个逗号

 $dbh = new PDO($dsn, $user, $password ,array(PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES utf8'));
                                     //^----- You missed adding this

只有在旧的PHP安装(早于PHP/5.3.6)中才推荐您设置编码的方法,但不是很旧-我不记得确切的版本,但您必须在真正旧的版本中手动运行
SET NAMES
查询,而
PDO::MYSQL\u ATTR\u INIT\u命令尚未实现

建议的方法是以下中的适当参数:

字符集

字符集。有关详细信息,请参阅字符集概念文档 更多信息

在PHP5.3.6之前,该元素被默默忽略。相同的 行为可以通过
PDO::MYSQL\u ATTR\u INIT\u命令
驱动程序选项


最后,您可以在构造函数中一次性设置所有设置。无需运行单独的
setAttribute()
调用。

只建议在旧的PHP安装(早于PHP/5.3.6)中使用设置编码的方法但不是很老—我不记得确切的版本,但您必须在真正旧的版本中手动运行
设置名称
查询,而在这些版本中,
PDO::MYSQL\u ATTR\u INIT\u命令
尚未实现

建议的方法是以下中的适当参数:

字符集

字符集。有关详细信息,请参阅字符集概念文档 更多信息

在PHP5.3.6之前,该元素被默默忽略。相同的 行为可以通过
PDO::MYSQL\u ATTR\u INIT\u命令
驱动程序选项


最后,您可以在构造函数中一次性设置所有设置。无需运行单独的
setAttribute()
调用。

刚刚看到接受的答案。如果你遇到一个解析错误,不要浪费每个人的时间忽略它,问一些完全无关的问题。这个问题似乎离题了,因为它是关于一个简单的语法错误。@阿尔瓦罗。维卡里奥,我的朋友们,我真的对这个函数感到困惑。这与分析错误无关。现在我开始更好地了解PDO是如何工作的。谢谢你的时间。刚刚看到接受的答案。如果你遇到一个解析错误,不要浪费每个人的时间忽略它,问一些完全无关的问题。这个问题似乎离题了,因为它是关于一个简单的语法错误。@阿尔瓦罗。维卡里奥,我的朋友们,我真的对这个函数感到困惑。这与分析错误无关。现在我开始更好地了解PDO是如何工作的。谢谢你抽出时间。