PHP没有';即使我设置了错误处理,也不会显示PDO错误
我需要使用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
$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();也