2013-02-08 57 views
19

這必須是一個新手的錯誤,但我沒有看到它。下面是我的代碼片段:Php mysqi bind_param變量數量與準備語句中的參數數量不匹配

$mysqli = mysqli_connect($dbCredentials['hostname'], 
    $dbCredentials['username'], $dbCredentials['password'], 
    $dbCredentials['database']); 

if ($mysqli->connect_error) { 
    throw new exception('Connect Error (' . $mysqli->connect_errno . ') ' 
    . $mysqli->connect_error); 
} 

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

$stmt->bind_param('is', $year, $make); 

$stmt->execute(); 

當我回聲出值$一年$作,我看到了價值,但是當我運行該腳本,我得到一個空值,而下面的警告出現在我的日誌文件:

PHP Warning: mysqli_stmt::bind_param(): Number of variables doesn't match number of parameters in prepared statement 

在這種情況下,今年是在int型數據庫(10),和我試圖通過已被強制轉換爲int類型的副本,並是一個varchar( 20)用utf8_unicode_ci編碼。我錯過了什麼嗎?

+0

你試圖對**做什麼**是在bind_param方法中? – 2013-02-08 20:48:09

+0

它是$ types字符串。 「是」應該表示第一個參數是一個整數,第二個參數是一個字符串。 – TMorgan 2013-02-08 20:58:59

回答

34

你準備的說法是錯誤的,它應該是:

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

單引號所做的?成爲價值而不是標記。它將已經是一個字符串,因爲你正在使用bind_param('is'

+0

謝謝。就是這樣。 – TMorgan 2013-02-08 21:04:57

+1

如果它解決了您的問題,請不要忘記標記爲答案。 – NoLifeKing 2014-05-09 06:04:16

相關問題