web-dev-qa-db-ja.com

PHP mysqli 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();

$ yearと$ makeの値をエコー出力すると値が表示されますが、このスクリプトを実行するとnull値が表示され、次の警告がログファイルに表示されます。

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

この場合、年はデータベースのint(10)型であり、intとしてキャストされたコピーを渡そうとしましたが、makeはutf8_unicode_ciエンコーディングのvarchar(20)です。何か不足していますか?

29
TMorgan

あなたの準備したステートメントは間違っています、それは次のようになります:

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

一重引用符はそれを作りましたか?マーカーではない値である。 bind_param('is'を使用してキャストしているため、すでに文字列になります

44
runspired