2013-05-31 44 views
5

Không chắc chắn tại sao tôi nhận được thông báo cảnh báo PHP này. Có vẻ như có bốn tham số trong câu lệnh đã chuẩn bị và cũng có bốn biến trong bind_param(). Cảm ơn vì bất kì sự giúp đỡ!PHP Cảnh báo: mysqli_stmt :: bind_param(): Số lượng biến không khớp với số tham số trong câu lệnh đã chuẩn bị

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

Bạn đang ràng buộc bốn biến vào truy vấn trong 'bind_param () ', nhưng không có trình giữ chỗ – andrewsi

Trả lời

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

những dòng này không có ý nghĩa gì! Nếu bạn muốn sử dụng các thông số, bạn phải sử dụng chúng vào một điều kiện where hoặc tương tự, khá nhiều như:

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

Nếu bạn không có bất kỳ giữ chỗ để ràng buộc với các thông số, bind_param() phương pháp sẽ tạo ra lỗi mà bạn đang chạy throug. Hơn nữa, những gì mà IF tuyên bố phải làm gì? Nếu bạn muốn xác minh xem truy vấn đó có tạo ra bất kỳ kết quả nào không, trước tiên bạn phải chạy nó và sau đó, để xác minh.

3

Bạn không cần phải ràng buộc các tham số trong trường hợp này. Trình giữ chỗ được sử dụng cho các giá trị trong câu lệnh INSERT hoặc trong mệnh đề WHERE. (Lưu ý rằng trình giữ chỗ không được phép cho số nhận dạng, chẳng hạn như tên cột trong bảng sao kê của bạn.) Một tuyên bố hợp lệ, đơn giản với trình giữ chỗ sẽ trông giống như:

"SELECT url, cover_image FROM back_issues WHERE month = ? and year = ?" 
Các vấn đề liên quan