首頁  >  問答  >  主體

預處理語句中參數數量與bind_param綁定的變數數量不一致

<p>這是我的程式碼片段:</p> <pre class="brush:php;toolbar:false;">$stmt = $mysqli->prepare("SELECT DISTINCT model FROM vehicle_types WHERE year = ? AND make = '?' ORDER by model"); $stmt->bind_param('is', $year, $make); $stmt->execute();</pre> <p>當我輸出$year和$make的值時,我可以看到這些值,但是當我運行這個腳本時,我得到一個空值,並且我的日誌檔案中出現以下警告:</ p> <blockquote> <p>PHP Warning: mysqli_stmt::bind_param(): Number of variables doesn't match number of parameters in prepared statement</p> </blockquote> <p>在這種情況下,year在資料庫中的類型是int(10),我已經嘗試將其轉換為int類型進行傳遞,而make是一個帶有utf8_unicode_ci編碼的varchar(20)。我有什麼遺漏嗎? </p>
P粉578343994P粉578343994396 天前401

全部回覆(1)我來回復

  • P粉513316221

    P粉5133162212023-08-23 14:52:19

    您的預處理語句是錯誤的,應該是:

    $stmt = $mysqli->prepare("
        SELECT DISTINCT model FROM vehicle_types WHERE year = ? AND make = ? ORDER by model
    ");
    $stmt->bind_param('is', $year, $make);
    $stmt->execute();

    當您準備一個語句時,您必須用問號而不是引號來取代每個變數。在引號內的問號將不會被辨識為佔位符。

    問號的數量必須等於bind_param()中的變數數量

    回覆
    0
  • 取消回覆