我在php中有以下内容:
public function myfunction($v){
//ini_set("memory_limit","32M");
$v=mysqli_real_escape_string($this->connection,$v);
$stmt=mysqli_prepare($this->connection,"SELECT * from TABLE WHERE MATCH(column) AGAINST($v)");
$this->throwExceptionOnError();
mysqli_stmt_execute($stmt);
$this->throwExceptionOnError();
$rows=array();
mysqli_stmt_bind_result($stmt,$row->column1,$row->column2);
while (mysqli_stmt_fetch($stmt)) {
$rows[]=$row;
$row = new stdClass();
mysqli_stmt_bind_result($stmt,$row->column1,$row->column2);
}
mysqli_stmt_free_result($stmt);
mysqli_close($this->connection);
print_r('this is a test');
print_r($rows);
}
这是在搜索具有全文索引的长篇文章列.....
运行此代码(带有注释掉的ini_set)我得到内存大小耗尽错误。当我取消注释ini_set部分并增加内存时,我没有输出并且没有错误(甚至没有'这是一个测试'被打印)。
为什么在增加内存时我没有得到任何输出(或至少是错误声明)?我没有在php中调整我的错误报告。
(直接在mysql中运行相同的语句(不增加内存限制)需要.0007秒)
答案 0 :(得分:0)
因为您保存了mysql在$rows
数组中提供的所有记录。
如果记录集很大,那么就会出现错误
也是mysqli_stmt_bind_result($stmt,$row->column1,$row->column2);
双重调用的语法
不是那么好看