2013-05-31 4 views
5

Nicht sicher, warum ich diese PHP-Warnmeldung bekomme. Es scheint, dass es in der vorbereiteten Anweisung vier Parameter und in bind_param() auch vier Variablen gibt. Danke für jede Hilfe!PHP Warnung: mysqli_stmt :: bind_param(): Die Anzahl der Variablen entspricht nicht der Anzahl der Parameter in der vorbereiteten Anweisung

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

Sie sind verbindlich vier Variablen auf die Abfrage in 'bind_param () ', haben aber keine Platzhalter – andrewsi

Antwort

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); 
    [...] 
} 

diese Linien machen keinen Sinn! Wenn Sie Parameter verwenden möchten, müssen Sie sie in einen where Zustand oder ähnliches verwenden, ziemlich viel wie:

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

Wenn Sie keine Platzhalter haben mit Parametern zu binden, wird bind_param() Methode den Fehler erzeugen Sie renne durch. Was soll diese IF-Anweisung außerdem tun? Wenn Sie überprüfen möchten, ob diese Abfrage ein Ergebnis liefert, müssen Sie es zuerst ausführen und dann überprüfen.

3

In diesem Fall müssen Sie keine Parameter binden. Platzhalter werden für die Werte in einer INSERT-Anweisung oder in einer WHERE-Klausel verwendet. (Beachten Sie, dass Platzhalter sind nicht für Bezeichner erlaubt, wie die Spaltennamen in Ihrer Erklärung.) Eine gültige, vereinfachte Erklärung mit Platzhalter würde wie folgt aussehen:

"SELECT url, cover_image FROM back_issues WHERE month = ? and year = ?"