我正在用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
答案 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