2013-02-08 15 views
19

To musi być błąd początkującego, ale go nie widzę. Oto fragment z mojego kodu:PHP mysqi bind_param Liczba zmiennych nie zgadza się z liczbą parametrów w przygotowanym oświadczeniu

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

Kiedy echo z wartości za USD rok i $ make, widzę wartości, ale kiedy uruchomić ten skrypt, dostaję wartość null, a następujące ostrzeżenie pojawia się w moim pliku dziennika:

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

w tym przypadku rok jest w bazie danych w typu int (10) i próbowałem przekazując kopię, że został oddany jako int, i zrobić to varchar (20) z kodowaniem utf8_unicode_ci. Czy czegoś brakuje?

+0

Co próbujesz zrobić z tym ** jest ** w metodzie bind_param? –

+0

Jest to łańcuch typów $. "Jest" powinno oznaczać, że pierwszy parametr jest liczbą całkowitą, a drugi jest łańcuchem. – TMorgan

Odpowiedz

34

Twój przygotowane oświadczenie jest źle, powinno być:

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

cudzysłowu wykonany jest? być wartością nie znacznikiem. Będzie to już ciąg znaków, ponieważ odlewasz się jako taki z bind_param('is'

+0

Dziękuję. To było dokładnie to. – TMorgan

+1

Nie zapomnij oznaczyć tej odpowiedzi jako rozwiązania problemu. – NoLifeKing

Powiązane problemy