使用以下代码,我如何知道数据库中插入了任何内容?
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";
}