我有一个准备好的php语句,可在我的数据库中插入一行。我一路上有(我认为)错误检查。最后,检查<script type="text/javascript">
$(document).ready(function() {
console.log('rdy');
$('#editAppModal').on('hidden.bs.modal', function (e) {
console.log('disposing..');
$('#editAppModal').modal('dispose');
})
});
</script>
上是否有错误。如果返回modal('dispose')
,我希望它取消$stmt->execute()
操作并显示我的消息。值为false
,但INSERT
仍然成功。我假设如果false
,那么我的数据库中就不会有INSERT
。
如果这是重复的话,我深表歉意,我在查找与我类似的先前问题时遇到了麻烦。
以下是引起问题的部分:
$stmt->execute()===false
答案 0 :(得分:2)
您执行两次查询。
实际上,您的代码显示为:
$stmt->execute();
if(false===($stmt->execute())){
$nbadmin->close();
echo '<script>alert("Something went wrong; try again.")</script>';
error();
}else{
$nbadmin->close();
finish();
}
但是,该片段的第一行执行准备好的语句,然后作为if(...)
条件的一部分再次执行。
这将执行另一次插入,但失败,可能是因为您的数据库表上存在一些唯一约束,我猜想是在username
字段上。
您有两种可能的解决方案。首先,您可以将execute()
的结果保存到变量中,如下所示:
$result = $stmt->execute();
if(false === $result) { ... }
否则,您可以直接在if(...)
语句内调用该方法,如下所示:
// $stmt->execute(); // remove this line
if(false === $stmt->execute()) { ... }
我自己还是会偏爱第一种选择。
最后,请注意,出于相同的原因,您也同时执行了$nbadmin->prepare($sql)
和$stmt->bind_param('sssssss', $user, $pass, $name, $branch, $officer, $type, $alert)
两次,但是它们似乎不会产生错误。