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

2022-08-30 10:13:37

通过以下代码段,我如何知道有任何内容已插入到数据库中?

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”,然后跳过依赖于上述插入成功的页面的其他代码段。

有什么想法吗?


答案 1

execute() 方法返回一个 ...所以只需这样做:boolean

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

更新:自 2022 年及以后,失败的查询将引发错误 Exception。因此,您不必编写任何代码来“跳过页面下方的其他代码片段” - 它将自动跳过。因此,您不应该添加任何条件,只需立即编写代码:

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

如果你需要做一些事情以防万一,那么马上就去做,比如

echo "success";

仅当查询成功时,您才会看到它。否则,它将是错误消息。


答案 2

检查 $stmt->execute() 的返回值

if(!$stmt->execute()) echo $stmt->error;

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


推荐