Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/251.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/actionscript-3/6.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错误_Php_Mysql_Exception_Pdo_Error Handling - Fatal编程技术网

PHP没有';即使我设置了错误处理,也不会显示PDO错误

PHP没有';即使我设置了错误处理,也不会显示PDO错误,php,mysql,exception,pdo,error-handling,Php,Mysql,Exception,Pdo,Error Handling,我需要使用PDO在数据库中插入一行。但它不工作,也不打印任何错误,所以我不知道问题出在哪里 连接正常,因为我可以运行更新查询 但是在这个查询中,它被卡住了,没有打印任何错误: $dbtype = "mysql"; $dbhost = "xxx"; $dbname = "xxx"; $dbuser = "xxx"; $dbpass = "xxx"; $db = new PDO("mysql:host=$dbhost;dbname=$dbname",$dbu

我需要使用PDO在数据库中插入一行。但它不工作,也不打印任何错误,所以我不知道问题出在哪里

连接正常,因为我可以运行更新查询

但是在这个查询中,它被卡住了,没有打印任何错误:

$dbtype     = "mysql";
$dbhost     = "xxx";
$dbname     = "xxx";
$dbuser     = "xxx";
$dbpass     = "xxx";

$db = new PDO("mysql:host=$dbhost;dbname=$dbname",$dbuser,$dbpass,array(PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES utf8"));
$db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

$sql = "INSERT INTO users (id, name) VALUES (:id,:name)";
$q = $db->prepare($sql);

$q->execute(array(
    ':id'=>$id,
    ':name'=>$name
));
除了这个命令,还有其他的调试方法吗

$conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
如果代码抛出异常,可能您已经关闭了,并且没有尝试捕获异常

因此,您必须将代码放入块中,例如

try {
    //your stuff
} catch(PDOException $e) {
    echo $e->getMessage();
}

因为PDO设置为在发生错误时引发异常,所以您必须使用此块捕获该异常。此外,我建议您启用错误报告以获取有用的错误消息(仅当从不在生产中登台时)

我也遇到了同样的问题,没有看到来自mysql的任何错误消息。经过研究,问题似乎与PHP本身无关,而是与mysql服务器配置有关。变量lc\u messages\u dir的默认值指向不存在的目录。在mysqld.cnf中添加了一行之后,重新启动了mysql服务器,最后运行正常。对我来说,以下是正确的选择:

lc_messages_dir=/usr/share/mysql

mysql参考手册对此进行了描述:

put print\r($conn->errorInfo());在执行并获取错误后?这总是空的:数组([0]=>00000[1]=>[2]=>)替换:id->id和:name->name with:。@JackDavis将您的代码放入一个try-and-catch块,例如
try{//your-stuff}catch(PDOException$e){echo$e->getMessage();}
@vanadium23不,这没有区别!谢谢,这是返回的错误。但奇怪的是,
$db->setAttribute(PDO::ATTR_ERRMODE,PDO::ERRMODE_EXCEPTION)不工作。我已启用所有警告和通知:
错误报告(E\u all);ini设置(“显示错误”,1)好的,我将使用它进行调试,谢谢。:)@JackDavis那么这可能不是一个致命的错误,它不会从错误报告中得到显示,而只是从捕获异常中得到显示。这个答案与它本身相矛盾。如果显示错误被关闭,那么应该没有echo$e->getMessage();也