2013-05-31 39 views
5

不確定爲什麼我要獲取此PHP警告消息。看起來準備好的語句中有四個參數,並且bind_param()中還有四個變量。謝謝你的幫助!PHP警告:mysqli_stmt :: bind_param():變量數量與預準備語句中的參數數量不匹配

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

你在'bind_param結合四個變量的查詢( )',但沒有佔位符 – andrewsi

回答

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

這些線路沒有任何意義!如果你想使用的參數,你必須將它們使用到where條件或類似的,很像:

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

如果你沒有任何佔位符與參數綁定,bind_param()方法將產生你的錯誤'通過運行。此外,IF聲明應該做什麼? 如果您想驗證該查詢是否產生任何結果,您必須先運行它,然後進行驗證。

3

在這種情況下,您不需要綁定參數。佔位符用於INSERT語句或WHERE子句中的值。 (請注意,佔位符不允許標識符,如在你的語句中的列名。)有效,簡化了佔位符聲明看起來像:

"SELECT url, cover_image FROM back_issues WHERE month = ? and year = ?" 
相關問題