我有
$sql = $db->prepare("INSERT INTO `aliases` (`alias`, `domain`, `added`, `enabled`) VALUES (:alias, :domain, :added, :enabled)");
$sql->bindValue(':alias', $alias);
$sql->bindValue(':domain', $domain);
$sql->bindValue(':added', time());
$sql->bindValue(':enabled', 1);
$sql->execute();
//how do I test if it was added or #1062 - Duplicate entry '...' for key 'alias'
我认为这是正确的。
我的问题是: 如何测试是否成功添加?
答案 0 :(得分:6)
您可以检查$sql->execute()
的返回值,如下所示:
if ($sql->execute()) {
// Query succeeded.
} else {
// Query failed.
$errorcode = $sql->errorCode();
}
有关详细信息,请参阅the documentation for PDOStatement(预准备语句类)。
答案 1 :(得分:2)
请参阅有关PDO Error handling和此comment
的文档默认情况下,您必须检查执行的返回。然后可以在errorinfo()和errorcode()
中找到详细信息if ($sql->execute === false) { //check return, false on error
var_dump($sql->errorinfo(); //array containing information on error
die()
}
但我会建议使用PDO :: ERRMODE_EXCEPTION,以便在出错时抛出PDOException。这使您的代码更整洁。基本信息由例外__toString()提供,但可以找到更多信息(使用例外的常规方法,请参阅上面文档的链接)。
$db = new PDO( /* your connection string */ );
$db->setAttribute( PDO::ATTR_ERRMODE, PDO::ERRMODE_WARNING );
try {
$sql = $db->prepare("INSERT INTO `aliases` (`alias`, `domain`, `added`, `enabled`) VALUES (:alias, :domain, :added, :enabled)");
$sql->execute();
}
catch(PDOException $e) {
echo $e; //basic information is provided due to Exception::__toString()
die();
}
答案 2 :(得分:1)
if ($stmt->errorCode() == "00000") {
// Query succeeded.
} else {
// Query failed.
echo "Error: " . $stmt->errorCode();
}