Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/actionscript-3/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php `$stmt->;execute()`返回False,但仍然插入_Php_Mysqli - Fatal编程技术网

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

Php `$stmt->;execute()`返回False,但仍然插入,php,mysqli,Php,Mysqli,我有一个准备好的php语句,可以在数据库中插入一行。我一直在(考虑)检查错误。最后检查$stmt->execute()上是否有错误。如果它返回false我希望它取消INSERT操作并显示我的消息。该值为false,但插入仍然成功。我假设如果$stmt->execute()==false,那么将不会有插入到我的数据库中 如果这是一个重复的问题,我很抱歉,我很难找到与我类似的问题 以下是导致问题的部分: $sql = "INSERT INTO login (username, passwor

我有一个准备好的php语句,可以在数据库中插入一行。我一直在(考虑)检查错误。最后检查
$stmt->execute()
上是否有错误。如果它返回
false
我希望它取消
INSERT
操作并显示我的消息。该值为
false
,但
插入仍然成功。我假设如果
$stmt->execute()==false
,那么将不会有
插入到我的数据库中

如果这是一个重复的问题,我很抱歉,我很难找到与我类似的问题

以下是导致问题的部分:

    $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");
}
$sql=“在登录(用户名、密码、姓名、分支机构、官员、类型、警报)中插入值(?,,,,,,,,,,?)”;
$stmt=$nbadmin->prepare($sql);
if(false==($nbadmin->prepare($sql))){
$nbadmin->close();
回音“警报”(“出现问题;再试一次”);
错误();
}
$stmt->bind_参数('sss'、$user、$pass、$name、$branch、$officer、$type、$alert);
if(false==($stmt->bind_param('sss',$user,$pass,$name,$branch,$officer,$type,$alert))){
$nbadmin->close();
回音“警报”(“出现问题;再试一次”);
错误();
}
$stmt->execute();
if(false==($stmt->execute()){
$nbadmin->close();
回音“警报”(“出现问题;再试一次”);
错误();
}否则{
$nbadmin->close();
完成();
}
函数错误(){
标题(“刷新:0;url=../edit user.php#user form”);
}

您正在执行两次查询

实际上,您的代码是:

$stmt->execute();
if(false===($stmt->execute())){
    $nbadmin->close();
    echo '<script>alert("Something went wrong; try again.")</script>';
    error();
}else{
    $nbadmin->close();
    finish();
}
或者,您可以直接在
if(…)
语句中调用该方法,如下所示:

$result = $stmt->execute();
if(false === $result) { ... }
// $stmt->execute(); // remove this line
if(false === $stmt->execute()) { ... }
不过,我本人会赞成第一种选择


最后,请注意,出于同样的原因,您还执行了两次
$nbadmin->prepare($sql)
$stmt->bind_param('sss',$user,$pass,$name,$branch,$officer,$type,$alert)
,但这些操作似乎不会产生错误。

您执行了两次查询

实际上,您的代码是:

$stmt->execute();
if(false===($stmt->execute())){
    $nbadmin->close();
    echo '<script>alert("Something went wrong; try again.")</script>';
    error();
}else{
    $nbadmin->close();
    finish();
}
或者,您可以直接在
if(…)
语句中调用该方法,如下所示:

$result = $stmt->execute();
if(false === $result) { ... }
// $stmt->execute(); // remove this line
if(false === $stmt->execute()) { ... }
不过,我本人会赞成第一种选择



最后,请注意,出于同样的原因,您还执行了两次
$nbadmin->prepare($sql)
$stmt->bind_param('sssss',$user,$pass,$name,$branch,$officer,$type,$alert)
,但这些似乎不会生成错误。

您执行语句两次,首先使用
$stmt execute()
之后,如果(…)
@MatteoTassinari您指的是
var\u dump()
?我刚搬走。那只是为了测试目的,我不是指
var\u dump
。当执行
if(false==($stmt->execute()){
)时,它会再次执行该语句!它失败可能是因为其中一个字段上存在唯一的约束,我猜
username
@MatteoTassinari我现在看到了,谢谢!您执行该语句两次,首先使用
$stmt->execute()
之后,在
if(…)
@MatteoTassinari中,你指的是
var\u dump()
?我刚刚删除了。那只是为了测试目的。我不是指
var\u dump
。当执行
if(false==($stmt->execute())时{
,再次执行该语句!它失败可能是因为其中一个字段上有一个唯一的约束,我猜
username
@MatteoTassinari我现在明白了,谢谢!第三个选项是启用错误报告并完全停止检查返回值。我认为这两件事是正确的complimentary@Dharman这对我有好处,但最终用户可能不知道如何处理php/mysql错误。你不应该向最终用户显示错误。将错误记录在服务器上的一个文件中。php具有惊人的错误报告功能。请看这是真的,但你还需要告诉用户操作是否成功,并且要这样做你需要检查返回值。第三个选项是启用错误报告,并完全停止检查返回值。嗯,我认为这两件事是complimentary@Dharman这对我来说是有益的,但是最终用户可能不知道如何处理php/mysql错误。你不应该向最终用户显示错误PHP具有惊人的错误报告功能。请看这是真的,但是您还需要告诉用户操作是否成功,并且要这样做,您需要检查返回值。