2011-12-02 47 views
0

好了,所以我有一個奇怪的奇情PHP的mysqli use_result限制古怪

我有一些代碼,看起來像這樣

public function select($sql, $params = false) 
{ 
    $output = false; 

    $this->_query = $this->escapeInto($sql, $params); 


    $this->_mysqli->real_query($this->_query); 

    $result = $this->_mysqli->use_result(); 
    return $result; 
} 

現在,當我通過在下面的查詢

$this->_query = "SELECT * from bookings ORDER BY booking_id ASC limit 38500,500"; 

和整個函數永遠不會返回它將到達函數的末尾,我可以在那裏打印調試,但它永遠不會返回。

但是,如果我發送任何其他查詢,它工作正常。這兩個工作和所有增加到這一點500的工作。

$this->_query = "SELECT * from bookings ORDER BY booking_id ASC limit 38501,500"; 
$this->_query = "SELECT * from bookings ORDER BY booking_id ASC limit 38500,501"; 

我沒有問題,與其他任何的查詢僅這一項和mysqli的似乎是從這一功能工作正常 它只是不會退出。我假設它與mysqli有關的問題,但無法找到任何此類問題。

任何想法?

+0

,當你進入這些你明白了什麼直接查詢MySQL? – Benjam

+0

公平的問題。它工作正常,我得到了你所期望的。 –

+0

在這種情況下,它可能是一個PHP錯誤。 – Benjam

回答

0

當LIMIT的偏移量很大時,mysql幾乎肯定需要執行全表掃描來確定順序,並且通常可以在大表上得到超時。

這幾乎是在第一次查詢期間發生的事情。

對於後續查詢,那裏的緩存已經放置,這將是快速
(PHP的超時不mysql的停止,但它仍然處理在後臺計算)

+0

我不認爲它的MySQL問題直接作爲查詢直接在mysql中正常工作,而不是像上面那樣運行。 –

+0

你是否在mysql命令行中打開了查詢緩存? – ajreal