2013-02-08 2 views
19

Das muss ein Anfängerfehler sein, aber ich sehe es nicht. Hier ist ein Ausschnitt aus meinem Code:PHP mysqi bind_param Anzahl der Variablen stimmt nicht mit der Anzahl der Parameter in der vorbereiteten Anweisung überein

$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(); 

Wenn ich die Werte für $ year Echo und $ machen, ich Werte sehe, aber wenn ich dieses Skript ausführen, bekomme ich einen Nullwert, und die folgenden Warnung erscheint in meiner Protokolldatei:

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

in diesem Fall ist Jahr in der Datenbank in Typ int (10), und ich habe versucht, eine Kopie vorbei, die als int geworfen worden waren, und macht eine varchar (20) mit der Codierung utf8_unicode_ci. Fehle ich etwas?

+0

Casting sind. Was haben Sie versucht, mit dem ** ist ** in der Methode bind_param? –

+0

Es ist die $ types Zeichenfolge. Das "ist" sollte bedeuten, dass der erste Parameter eine Ganzzahl und der zweite eine Zeichenkette ist. – TMorgan

Antwort

34

Ihre vorbereitete Aussage falsch ist, sollte es sein:

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

Die Apostrophe gemacht, dass? Sei der Wert kein Marker. Es wird bereits eine Zeichenfolge sein, weil Sie als solche mit bind_param('is'

+0

Danke. Das war es genau. – TMorgan

+1

Vergessen Sie nicht, dies als die Antwort zu markieren, wenn es Ihr Problem gelöst hat. – NoLifeKing