2013-02-08 9 views
19

Questo deve essere un errore newbie, ma non lo vedo. Ecco un frammento dal mio codice:Php mysqi bind_param Il numero di variabili non corrisponde al numero di parametri nell'istruzione preparata

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

Quando Mi unisco i valori a $ l'anno e $ faccio, sto vedendo i valori, ma quando ho eseguito questo script, ottengo un valore nullo, e il seguente avviso appare nel mio file di registro:

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

in questo caso, quest'anno è presente nel database di tipo int (10), ed ho provato passando una copia che era stato lanciato come un int, e fare un varchar (20) con la codifica utf8_unicode_ci. Mi sto perdendo qualcosa?

+0

Cosa hai provato a fare con quello ** è ** nel metodo bind_param? –

+0

È la stringa $ types. Il "è" dovrebbe significare che il primo parametro è un numero intero e il secondo è una stringa. – TMorgan

risposta

34

tua dichiarazione preparata è sbagliato, dovrebbe essere:

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

Le virgolette fatto questo? sii il valore non un marcatore. Sarà già una stringa perché stai castando come tale con bind_param('is'

+0

Grazie. Era esattamente così. – TMorgan

+1

Non dimenticare di contrassegnare questa come risposta se ha risolto il tuo problema. – NoLifeKing

Problemi correlati