未捕獲的 ValueError 錯誤:mysqli_stmt::execute():參數 #1($params)必須是一個列表數組
P粉502608799
P粉502608799 2024-02-03 17:09:57
0
1
424

我試著透過這兩個查詢在我的資料庫中插入準備好的語句多個值,這兩個查詢都發生故障,回傳其中一個

未捕獲錯誤:呼叫未定義的方法 mysqli_stmt::bindValue()

第一個程式碼或

未捕獲的 ValueError:mysqli_stmt::execute():參數 #1 ($params) 必須是列表數組

第二個。當我輸入 list 而不是 array 時,它顯示

語法錯誤

注意所有變數、表格和欄位名稱都是簡化的變體

我看過很多類似的問題,但沒有一個能回答我的問題。甚至不是這個「重複」的那個。

有人有解決方案,或是替代方案嗎?

這是兩個程式碼:

if(isset($_POST['ID'], $_POST['atr1'])){

        $sql = $db -> prepare("INSERT INTO some_table (ID, atr_place) VALUES (':fir', ':sec')");
        
        $sql -> bindValue(':fir', $_POST['ID'],);
        $sql -> bindValue(':sec', $_POST['atr1'],);
        $sql -> execute();
}
$sql = $db -> prepare("INSERT INTO some_table (ID, atr_place) VALUES (:fir, :sec)");
$sql -> execute(array(
    ':fir' => $_POST['ID'],
    ':sec' => $_POST['atr1'],
));

P粉502608799
P粉502608799

全部回覆(1)
P粉373596828

正如錯誤訊息所表明的那樣,您正在使用 mysqli a> 與您的資料庫進行通訊的程式庫。但是,您的程式碼似乎是基於使用 PDO 的範例,其中是一個完全不同的圖書館。雖然表面上一些函數名稱相似,但實際上它們具有不同的 API 和要求。

例如,一些 API 差異是:

  • mysqli 不支援命名參數,僅支援使用 ? 指定的匿名佔位符
  • PDO有bindParam和bindValue函數,而mysqli有bind_param
  • 在 PHP 8.1 之前,mysqli 不接受直接透過execute() 函數提供的參數清單。

此程式碼應該與 mysqli 一起使用:

如果您有 PHP 8.1 或更高版本:

$sql = $db->prepare("INSERT INTO some_table (ID, atr_place) VALUES (?, ?)");
$sql->execute([$_POST['ID'], $_POST['atr1']]);

否則:

$sql = $db->prepare("INSERT INTO some_table (ID, atr_place) VALUES (?, ?)");
$sql->bind_param("ss", $_POST['ID'], $_POST['atr1']);
$sql->execute();
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板