$ stmt-> execute():如何知道db insert是否成功?

时间:2012-04-03 10:59:11

标签: php oop mysqli

使用以下代码,我怎么知道有什么东西被插入到db?

if ($stmt = $connection->prepare("insert into table (blah) values (?)")) {
$stmt->bind_param("s", $blah);  
$stmt->execute();           
$stmt->close();                                 
}

我原本以为添加以下行会有效,但显然不行。

if($stmt->affected_rows==-1){$updateAdded="N"; echo "failed";}  

然后使用$ updatedAdded =“N”然后跳过页面下方的其他代码段,这些代码依赖于上面的插入成功。

有什么想法吗?

6 个答案:

答案 0 :(得分:70)

execute()方法返回boolean ...所以只需执行此操作:

if ($stmt->execute()) { 
   // it worked
} else {
   // it didn't
}

答案 1 :(得分:23)

检查$ stmt-> execute()

的返回值
if(!$stmt->execute()) echo $stmt->error;

请注意,代码行确实执行了execute()命令,因此请使用它来代替当前的$ stmt-> execute()而不是它。

答案 2 :(得分:6)

只需检查the manual pages您正在使用的任何功能:

  

prepare() - 如果发生错误,则返回语句对象或 FALSE
  bind_param() - 成功时返回TRUE或失败时 FALSE
  execute() - 成功时返回TRUE或失败 FALSE   close() - 成功时返回TRUE或失败 FALSE

但实际上,这会让人烦恼,而且容易出错。最好configure mysqli to throw exceptions on error并除去所有特定的错误处理,除了少数会出现错误的情况(例如,可能违反唯一约束的暂定插入):

mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT);

答案 3 :(得分:4)

如果您想知道可以使用rowCount on the pdo statement

的受影响行数
$stmt->rowCount();

执行后;

如果您正在讨论错误处理我认为最好的选择是将errmode设置为抛出扩展并将所有内容包装在try / catch块中

try
{
    //----
}
catch(PDOException $e)
{
    echo $e->getMessage();
}

答案 4 :(得分:1)

您可以在执行后检查返回的值:

if ($stmt->execute()) { 
    // ok :-)
    $count = $stmt->rowCount();
    echo count . ' rows updated properly!';
} else {
    // KO :-(
    print_r($stmt->errorInfo());
}

答案 5 :(得分:0)

其他方式:

if ($stmt->error){
        echo "Error";
    }
    else{
        echo "Ok";
    }