使用PDO和INSERT(PHP)

时间:2011-07-03 12:32:26

标签: php mysql sql 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'

我认为这是正确的。

我的问题是: 如何测试是否成功添加?

3 个答案:

答案 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();
}