2013-05-31 3 views
5

Non sono sicuro del motivo per cui ricevo questo messaggio di avviso PHP. Sembra che ci siano quattro parametri nell'istruzione preparata e anche quattro variabili in bind_param(). Grazie per qualsiasi aiuto!Avviso PHP: mysqli_stmt :: bind_param(): il numero di variabili non corrisponde al numero di parametri nell'istruzione preparata

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

Stai vincolante quattro variabili alla query in 'bind_param () ', ma non ha alcun segnaposto – andrewsi

risposta

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

queste linee non fanno alcun senso! Se si desidera utilizzare i parametri, è necessario usarli in una condizione where o simili, più o meno come:

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

Se non si dispone di alcun segnaposto di legarsi con i parametri, bind_param() metodo produce l'errore che stai correndo. Inoltre, cosa avrebbe dovuto fare questa dichiarazione IF? Se si desidera verificare se tale query produce alcun risultato, è necessario prima eseguirlo e quindi verificare.

3

In questo caso non è necessario associare i parametri. I segnaposto vengono utilizzati per i valori in un'istruzione INSERT o in una clausola WHERE. (Si noti che i segnaposto non sono ammessi per gli identificatori, come ad esempio i nomi delle colonne nell'istruzione.) A, dichiarazione valida semplificata con i segnaposto sarà simile:

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