使用以下代码,我怎么知道有什么东西被插入到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”然后跳过页面下方的其他代码段,这些代码依赖于上面的插入成功。
有什么想法吗?
答案 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";
}