如何捕获pdo语句错误?

时间:2014-04-16 09:43:34

标签: php mysql pdo

我正在用PDO做一些测试,我发现了try catch

的“问题”

我尝试在表中插入“tryhard”2个值,但是这个表只有一个字段(名称)。

try{$pdo = new PDO('mysql:host=localhost;dbname=testpdomysql', 'root', '');
编辑:我把

 $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION );

而不是

//$pdo->setAttribute( PDO::ATTR_ERRMODE, PDO::ERRMODE_WARNING ); 



$pdo->beginTransaction();

$preparedStatement = $pdo->prepare('INSERT INTO tryhard VALUES (:nom ,:prenom)');
$preparedStatement->execute(array(
    'nom' => $_GET['nom'],
    'prenom' => $_GET['prenom'],
));

$pdo->commit();

echo "OK";
}
catch(Exception $e) {
$pdo->rollback();
echo "KO";
exit();

}

Ofc,它无法添加它。我理解,但我希望它会抛出一个例外,以便进入捕获。但它没有,我觉得退出f ***。

所以。在这种情况下获得错误的最佳方法是什么?我是否应评论第二行?

Thinqs

3 个答案:

答案 0 :(得分:3)

如果您要在出现错误时暂停脚本,则甚至无需捕获。

$pdo = new PDO('mysql:host=localhost;dbname=testpdomysql', 'root', '');
$pdo->setAttribute( PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); 
$pdo->beginTransaction();

$stmt = $pdo->prepare('INSERT INTO tryhard VALUES (?, ?)');
$stmt->execute(array($_GET['nom'],$_GET['prenom']));
$pdo->commit();

使用此代码,您将记录错误消息,脚本暂停并在发生错误时回滚事务

请注意,对于单个查询,您不需要事务。

答案 1 :(得分:2)

除非您将PDO::ATTR_ERRMODE设置为PDO::ERRMODE_EXCEPTION,否则错误的查询不会引发异常。

答案 2 :(得分:-1)

有关PDO例外的更多信息,请查看http://php.net/manual/de/class.pdoexception.php