2011-07-03 171 views
1

我有用INSERT(PHP)使用PDO

$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

你缺少的线值赋给:别名:域:添加:启用 – Freddie

+0

哦,我忘了复制它们。我现在将它们添加到 – John

+0

将检查$ sql-> errorCode()的工作? – John

回答

6

您可以检查返回值的$sql->execute(),像这样:

if ($sql->execute()) { 
    // Query succeeded. 
} else { 
    // Query failed. 
    $errorcode = $sql->errorCode(); 
} 

欲了解更多信息,请参见the documentation for PDOStatement(类预处理语句)。

+0

测试,它的工作原理;谢谢。 – John

2

请参阅该文档有关PDO Error handlingcomment

默认情况下,你必须检查执行的回报。详情可再errorinfo()errorcode()

if ($sql->execute === false) { //check return, false on error 
    var_dump($sql->errorinfo(); //array containing information on error 
    die() 
} 

中查到,但是我会用recommened 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(); 
} 
1
if ($stmt->errorCode() == "00000") { 
    // Query succeeded. 
} else { 
    // Query failed. 
    echo "Error: " . $stmt->errorCode(); 
}