2013-05-31 9 views
5

Nie wiem, dlaczego otrzymuję komunikat ostrzegawczy PHP. Wygląda na to, że w przygotowanej instrukcji znajdują się cztery parametry, a także cztery zmienne w bind_param(). Dzięki za pomoc!Ostrzeżenie PHP: mysqli_stmt :: bind_param(): Liczba zmiennych nie pasuje do liczby parametrów w przygotowanej instrukcji.

if($stmt = $mysqli -> prepare("SELECT url, month, year, cover_image FROM back_issues ORDER BY year DESC, month DESC")) { 
    $stmt -> bind_param("ssis", $url, $month, $year, $cover_image); 

    $stmt -> execute(); 

    $stmt -> bind_result($url, $month, $year, $cover_image); 

    $stmt -> fetch(); 

    while ($stmt->fetch()) { 
    echo "<li class='item'><a href='$url'><img src='$cover_image' alt='$cover_image' width='' height='' /></a><br /><span class='monthIssue'>$month $year</span></li>"; 
    } 

    $stmt -> close(); 
    $mysqli -> close(); 

} 
+0

Ty wiążące cztery zmienne do zapytania w 'bind_param () ', ale nie ma żadnych elementów zastępczych – andrewsi

Odpowiedz

8
if($stmt = $mysqli -> prepare("SELECT url, month, year, cover_image FROM back_issues ORDER BY year DESC, month DESC")) { 
    $stmt -> bind_param("ssis", $url, $month, $year, $cover_image); 
    [...] 
} 

te linie nie ma sensu! Jeśli chcesz użyć parametrów, trzeba użyć je do stanu where lub podobny, dość dużo jak:

$mysqli->prepare("SELECT * FROM back_issues WHERE url =? AND month =? AND year =? and cover_image = ?"); 
$stmt->bind_param("ssis", $url, $month, $year, $cover_image); 

Jeśli nie ma żadnego zastępczy powiązać z parametrami bind_param() metoda będzie produkować błąd Znowu ucieka. Co więcej, co powinna zrobić ta instrukcja IF? Jeśli chcesz sprawdzić, czy to zapytanie daje wynik, musisz go najpierw uruchomić, a następnie zweryfikować.

3

Nie trzeba wiązać parametrów w tym przypadku. Symbole zastępcze są używane dla wartości w instrukcji INSERT lub w klauzuli WHERE. (Zauważ, że zastępcze nie są dozwolone dla identyfikatorów, takich jak nazwy kolumn w swoim oświadczeniu.) Ważny, uproszczone oświadczenie zastępcze wyglądałby następująco:

"SELECT url, cover_image FROM back_issues WHERE month = ? and year = ?" 
Powiązane problemy