亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

`$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 關注
  • 383 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號