为了账号安全,请及时绑定邮箱和手机立即绑定

`$stmt->execute()` 返回 False 但仍然插入

`$stmt->execute()` 返回 False 但仍然插入

PHP
DIEA 2021-12-03 16:35:24
我有一个准备好的 php 语句来在我的数据库中插入一行。我在此过程中进行了(我认为的)错误检查。最后有一个错误检查$stmt->execute()。如果它返回,false我希望它取消INSERT操作并显示我的消息。值是false但INSERT仍然成功。我曾假设如果$stmt->execute()===false那时INSERT我的数据库中没有。如果这是重复的,我深表歉意,我无法找到与我类似的先前问题。这是导致问题的部分:    $sql = "INSERT INTO login (username, password, name, branch, officer, type, alerts) VALUES (?, ?, ?, ?, ?, ?, ?)";    $stmt = $nbadmin->prepare($sql);    if(false===($nbadmin->prepare($sql))){        $nbadmin->close();        echo '<script>alert("Something went wrong; try again.")</script>';        error();    }    $stmt->bind_param('sssssss', $user, $pass, $name, $branch, $officer, $type, $alert);    if(false===($stmt->bind_param('sssssss', $user, $pass, $name, $branch, $officer, $type, $alert))){        $nbadmin->close();        echo '<script>alert("Something went wrong; try again.")</script>';        error();    }    $stmt->execute();    if(false===($stmt->execute())){        $nbadmin->close();        echo '<script>alert("Something went wrong; try again.")</script>';        error();    }else{        $nbadmin->close();        finish();    }function error(){    header("Refresh: 0; url=../edit-user.php#user-form");}
查看完整描述

1 回答

?
拉莫斯之舞

TA贡献1820条经验 获得超10个赞

您正在执行两次查询。


事实上,你的代码是这样写的:


$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)两次,出于同样的原因,但这些似乎并没有产生一个错误。


查看完整回答
反对 回复 2021-12-03
  • 1 回答
  • 0 关注
  • 307 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信