$stmt->;execute():如何知道数据库插入是否成功


$stmt->execute() : How to know if db insert was successful?

使用以下代码,我如何知道数据库中插入了任何内容?

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";}  

然后使用$updatedAddd="N"跳过页面下方依赖于上述插入成功的其他代码段。

有什么想法吗?

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";

只有当查询成功时,您才会看到它。否则将显示错误消息。

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

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

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

从PHP/8.1.0开始,默认设置是在出现错误时抛出异常,因此无需执行任何特殊操作。您的全局异常处理程序将处理它,或者您可以尝试/catch进行特定的处理。


对于旧版本,您可以查看您正在使用的任何功能的手册页面:

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

然而,在实践中,这会让人讨厌,而且很容易出错。最好将mysqli配置为在出现错误时抛出异常,并取消所有特定的错误处理,除非在少数情况下会出现错误(例如,可能违反唯一约束的临时插入):

mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT);

默认值曾经是MYSQLI_REPORT_OFF。在PHP/8.1.0上,它更改为MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT

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

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

如果您想知道受影响的行数,可以在pdo语句中使用rowCount

$stmt->rowCount();

执行后;

如果你谈论的是错误处理,我认为最好的选择是将errmode设置为抛出外部选项,并将所有内容封装在try/catch块中

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

其他方式:

if ($stmt->error){
        echo "Error";
    }
    else{
        echo "Ok";
    }
相关文章: