2013-10-28 34 views
6

認爲這是一個很簡單的查詢:mysqli_stmt_bind_param導致致命的錯誤:內存容量用盡

$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); 

然而,PHP似乎認爲並非如此。在運行查詢時,出現以下錯誤:

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 

當使用mysql_stmt_bind_param行時。如果我離開這一行,並可以調整SELECT語句直接使用字符串變量$qstring,我沒有得到任何屏幕上顯示的結果(實際上,我在屏幕上得到顯示NOTHING,甚至沒有echo!)

這ISN是一個特別大的表(少於300行),並且此查詢應該返回10行左右(並且SELECT語句在phpmyadmin中正常工作,預期結果將返回)

我在做什麼錯?


編輯:

我已經檢查,以確保$ QString的竟是一個字符串:這裏的var_dump結果:字符串(14) 「riskassessment」

+0

你在cPanel服務器上嗎? –

+0

做這個測試:$ qry =「SELECT taglink,tagtitle,tagshow FROM taglist_main WHERE tag ='」。$ qstring。「'」; echo $ qry,並輸出plss – Hackerman

+0

'$ qstring'的內容是什麼?你可以做'var_dump($ qstring)'並將其編輯到你的問題中嗎? – andrewsi

回答

4

與@andrewsi幫助:

交換mysqli_stmt_bind_result($stmt,$taglink,$tagtitle,$tagshow);mysqli_stmt_store_result($stmt);線的順序,這樣的代碼段現爲:

$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); 

希望這將是有益的那些誰仍然喜歡寫程序代碼。

0

這是一個PHP內存錯誤:「致命錯誤」這實際上與mysql無關,因爲mysql會產生不同的錯誤。問題是,PHPMyAdmin運行在一個cPanel後端,它有一個單獨的PHP安裝和Apache,所以資源限制設置得更高。您的PHP腳本在較低規格的獨立php環境中運行。我會與您的主機一起提高您的PHP內存限制閾值,或查看下面的鏈接。

Raise Memory Limit

+0

在這種情況下,它不是。 – user2224457

相關問題