使用下面的代码,我怎么知道有什么东西被插入到db中?
if ($stmt = $connection->prepare("insert into table (blah) values (?)")) {
$stmt->bind_param("s", $blah);
$stmt->execute();
$stmt->close();
}
Run Code Online (Sandbox Code Playgroud)
我原以为添加以下行会起作用,但显然不行.
if($stmt->affected_rows==-1){$updateAdded="N"; echo "failed";}
Run Code Online (Sandbox Code Playgroud)
然后使用$ updatedAdded ="N"然后跳过页面下方的其他代码段,这些代码段依赖于上面的插入成功.
有任何想法吗?
Man*_*eUK 72
该execute()
方法返回一个boolean
......所以这样做:
if ($stmt->execute()) {
// it worked
} else {
// it didn't
}
Run Code Online (Sandbox Code Playgroud)
Mat*_*ttP 23
检查$ stmt-> execute()的返回值
if(!$stmt->execute()) echo $stmt->error;
Run Code Online (Sandbox Code Playgroud)
请注意,代码行确实执行了execute()命令,因此请使用它来代替当前的$ stmt-> execute().
只需查看您正在使用的任何功能的手册页:
prepare() - 返回一个语句对象或
FALSE
发生错误.
bind_param() -TRUE
成功或FALSE
失败时返回.
execute() -TRUE
成功或FALSE
失败时返回.
close() -TRUE
成功或FALSE
失败时返回.
但实际上,这很烦人,而且容易出错.最好配置mysqli以在错误上抛出异常并除去所有特定的错误处理,除了少数会出现错误的情况(例如,可能违反唯一约束的暂定插入):
mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT);
Run Code Online (Sandbox Code Playgroud)
小智 7
您可以在执行后检查返回值:
if ($stmt->execute()) {
// ok :-)
$count = $stmt->rowCount();
echo count . ' rows updated properly!';
} else {
// KO :-(
print_r($stmt->errorInfo());
}
Run Code Online (Sandbox Code Playgroud)
如果您想知道受影响的行数,可以在pdo语句上使用rowCount
$stmt->rowCount();
Run Code Online (Sandbox Code Playgroud)
执行后
如果您正在谈论错误处理,我认为最好的选择是将errmode设置为抛出异常并将所有内容包装在try / catch块中
try
{
//----
}
catch(PDOException $e)
{
echo $e->getMessage();
}
Run Code Online (Sandbox Code Playgroud)