我有一個由聯合更小的查詢構建的動態查詢。我使用union,因爲我需要從一個大列表中的幾張表中獲取數據。這些表格有許多共同之處,但我仍然需要單獨表格中的數據。所以我認爲這個解決方案似乎是最好的。 此工作過,到目前爲止好,但今天我加了一些更多的查詢,現在它打破,它給了我這個錯誤:在bind_result上耗盡的字節允許的內存大小
Fatal error: Allowed memory size of 134217728 bytes exhausted (tried to allocate 150994936 bytes)
錯誤是指這樣的功能:
function selectResults($stmt){
$parameters = array();
$results = array();
$meta = $stmt->result_metadata();
while ($field = $meta->fetch_field()) {
$parameters[] = &$row[$field->name];
}
//------THIS IS WHERE THE ERROR IS------
call_user_func_array(array($stmt, 'bind_result'), $parameters);
//--------------------------------------
while ($stmt->fetch()) {
$x = array();
foreach($row as $key => $val) {
$x[$key] = $val;
}
$results[] = $x;
}
return $results;
}
功能被稱爲是這樣的:
$mysqli = new mysqli('localhost', 'username', 'pass', 'db');
$stmt = $mysqli -> prepare("some query");
$stmt -> execute();
$results = selectResults($stmt);
$stmt -> close();
$mysqli -> close();
該查詢可以是約1500字,是不是太多了?
將所有的表放入同一個表,並只有一個查詢解決這個問題?
寧願避免改變php配置中的東西。我還更新了我的問題。 –
儘管這樣可以解決這個錯誤,但拖拽150MB並複製它是一個資源問題。大多數時候,整個結果集不需要駐留內存。我認爲這至少是一個設計問題。無論如何,使用部分結果集而不是整個事情? –
你也可以改變腳本或htaccess中的內存限制(假設httpd.conf允許覆蓋),如果你不想改變它在PHP配置 –