0

我有一个由联合较小查询构建的动态查询。我使用联合是因为我需要从一个大列表中的几个表中获取数据。这些表有很多共同点,但我仍然需要单独表中的数据。因此,我认为这个解决方案似乎是最好的解决方案。到目前为止效果很好,但今天我添加了更多查询,现在它坏了,它给了我这个错误:

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字,是不是太多了?

将所有表放在同一个表中并仅使用一个查询即可解决此问题吗?

4

2 回答 2

3

我尝试将最新的子查询与另一个子查询一起使用,但它仍然给了我错误。所以我认为新的子查询是问题而不是子查询的数量。新的子查询有一个 mediumtext 字段,而另一个有一个 varchar。我尝试将 mediumtext 切换为 varchar,现在它可以工作了。我没有理由将它用作中文本,所以这解决了它。

于 2013-03-31T16:24:04.330 回答
0

尝试增加你的 php 配置中的 memory_limit。

于 2013-03-31T16:04:57.707 回答