2013-10-28 14 views
6

tôi nghĩ đây là một câu hỏi khá đơn giản:mysqli_stmt_bind_param gây lỗi nghiêm trọng: kích thước bộ nhớ cạn kiệt

$qry="SELECT taglink, tagtitle, tagshow FROM taglist_main WHERE tag = ?"; 
if ($stmt = mysqli_prepare($link,$qry)) { 
    mysqli_stmt_bind_param($stmt,"s",$qstring); 
    mysqli_stmt_execute($stmt); 
    mysqli_stmt_bind_result($stmt,$taglink,$tagtitle,$tagshow); 
    mysqli_stmt_store_result($stmt); 
    echo "<p><strong>".mysqli_stmt_num_rows($stmt)."</strong> entries found, shown below.</p>";       
    while (mysqli_stmt_fetch($stmt)) { 
     echo "<li><a href=\"/$taguri\" title=\"$tagtitle\">$tagshow</a></li>"; 
    } 
mysqli_stmt_close($stmt); 

Tuy nhiên, php dường như lại nghĩ khác. Khi chạy truy vấn, tôi nhận được lỗi sau:

Fatal error: Allowed memory size of 268435456 bytes exhausted (tried to allocate 4294967296 bytes) in /home/envoyenv/public_html/envoytest/tags/index.php on line 110 

khi sử dụng đường dây mysql_stmt_bind_param. Nếu tôi rời khỏi dòng đó ra và điều chỉnh báo cáo kết quả SELECT sử dụng chuỗi biến $qstring trực tiếp, tôi nhận được không có kết quả hiển thị trên màn hình (trên thực tế, tôi nhận được NOTHING hiển thị trên màn hình, chứ không phải ngay cả những echo!)

isn này không phải là một bảng đặc biệt lớn (dưới 300 hàng) và truy vấn này sẽ trả về 10 hàng hoặc hơn (và câu lệnh SELECT hoạt động tốt trong phpmyadmin, kết quả mong đợi được trả lại)

Tôi đang làm gì sai?


Edit:

tôi đã kiểm tra để đảm bảo $ QString đã thực sự là một chuỗi: đây là kết quả của var_dump: string (14) "riskassessment"

+0

Bạn đang sử dụng máy chủ cPanel? –

+0

Thực hiện thử nghiệm này: $ qry = "SELECT liên kết thẻ, tagtitle, tagshow FROM taglist_main WHERE tag = '". $ Qstring. "'"; echo $ qry, và post plss đầu ra – Hackerman

+0

Nội dung của '$ qstring' là gì? Bạn có thể làm một 'var_dump ($ qstring)' và chỉnh sửa nó vào câu hỏi của bạn? – andrewsi

Trả lời

4

Với sự giúp đỡ từ @andrewsi:

Swap thứ tự của các mysqli_stmt_bind_result($stmt,$taglink,$tagtitle,$tagshow);mysqli_stmt_store_result($stmt); đường nên đoạn mã bây giờ đọc:

$qry="SELECT taglink, tagtitle, tagshow FROM taglist_main WHERE tag = ?"; 
if ($stmt = mysqli_prepare($link,$qry)) { 
    mysqli_stmt_bind_param($stmt,"s",$qstring); 
    mysqli_stmt_execute($stmt); 
    mysqli_stmt_store_result($stmt); 
    mysqli_stmt_bind_result($stmt,$taglink,$tagtitle,$tagshow); 
    echo "<p><strong>".mysqli_stmt_num_rows($stmt)."</strong> entries found, shown below.</p>";       
    while (mysqli_stmt_fetch($stmt)) { 
     echo "<li><a href=\"/$taguri\" title=\"$tagtitle\">$tagshow</a></li>"; 
    } 
mysqli_stmt_close($stmt); 

Hy vọng rằng điều này sẽ có ích cho những ai vẫn muốn viết mã thủ tục.

0

Đây là một lỗi PHP Memory : "Lỗi nghiêm trọng" này thực sự không có gì để làm với mysql, như mysql sẽ tạo ra một lỗi khác nhau. Vấn đề là, PHPMyAdmin chạy trên một backend cPanel, trong đó có một cài đặt riêng biệt của PHP, và Apache, do đó, các giới hạn tài nguyên được thiết lập cao hơn. PHP Script của bạn chạy trong một môi trường php riêng biệt với thông số kỹ thuật thấp hơn. Tôi sẽ nhận được với máy chủ của bạn để nâng cao ngưỡng giới hạn bộ nhớ PHP của bạn hoặc xem liên kết bên dưới.

Raise Memory Limit

+0

Trong trường hợp này thì không. – user2224457

Các vấn đề liên quan