2013-05-31 5 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() विधि आप त्रुटि उत्पन्न करेगा थ्रूग चल रहा है। इसके अलावा, क्या आईएफ कथन क्या करना चाहिए? यदि आप यह सत्यापित करना चाहते हैं कि वह क्वेरी कोई परिणाम उत्पन्न करती है, तो आपको इसे चलाने के लिए पहले और फिर सत्यापित करना होगा।

3

आपको इस मामले में पैरामीटर को बांधने की आवश्यकता नहीं है। प्लेसहोल्डर्स को INSERT कथन में या WHERE क्लॉज में मानों के लिए उपयोग किया जाता है। (ध्यान दें कि प्लेसहोल्डर जैसे आपका बयान में स्तंभ नाम के रूप में पहचानकर्ता के लिए अनुमति नहीं है,।) एक वैध, प्लेसहोल्डर के साथ सरल बयान देखने की तरह होगा:

"SELECT url, cover_image FROM back_issues WHERE month = ? and year = ?" 
संबंधित मुद्दे