我正在使用 Zend\Db\Adapter\Adapter 使用 PDO_Mysql 驱动程序启动查询。我想用 PDOException 类捕获主键违规。
以下代码正确捕获异常并显示第一条消息。它基于具有执行模式的查询方法。
try {
$dbAdapter = new DbAdapter(array(
'driver' => 'Pdo_Mysql', 'database' => 'securedraw',
'username' => 'root', 'password' => '',));
$sql = "INSERT INTO users (mail, password) values('josep', 'josep')";
$dbAdapter->query($sql, DbAdapter::QUERY_MODE_EXECUTE);
}catch (\PDOException $e) {
print "First Message " . $e->getMessage() . "<br/>";
}catch (\Exception $e) {
print "Second Message: " . $e->getMessage() . "<br/>";
}
我不明白,因为这段代码没有捕捉到它(独特的变化是它是一个准备好的语句)。
在这种情况下,显示第二条消息,它更通用,并且没有说明错误是否是主键违规。
try {
$dbAdapter = new DbAdapter(array(
'driver' => 'Pdo_Mysql', 'database' => 'securedraw',
'username' => 'root', 'password' => '',));
$sql = "INSERT INTO users (mail, password) values('josep', 'affsafq')";
$statement = $dbAdapter->createStatement($sql);
$statement->execute();
}catch (\PDOException $e) {
print "First Message " . $e->getMessage() . "<br/>";
}catch (\Exception $e) {
print "Second Message: " . $e->getMessage() . "<br/>";
}