搜尋

首頁  >  問答  >  主體

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

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

未捕獲錯誤:呼叫未定義的方法 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粉502608799P粉502608799381 天前476

全部回覆(1)我來回復

  • P粉373596828

    P粉3735968282024-02-04 14:00:15

    正如錯誤訊息所表明的那樣,您正在使用 mysqli 與您的資料庫進行通訊的程式庫。但是,您的程式碼似乎是基於使用 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();

    回覆
    0
  • 取消回覆