【发布时间】:2013-11-25 00:37:08
【问题描述】:
我正在运行以下查询,其中包含两个长文本字段(175 和 525),但出现内存不足的错误。此查询是否已经太长或发生了其他事情?
错误:致命错误:内存不足(已分配 1310720)(试图分配 4294967296 字节)
$query = "SELECT username, url, accountcreated, accountstatus, address, city, birthday, education, relation, gender, profile_story, intsettinga, intsettingb FROM users WHERE username=?";
$stmt = $db->stmt_init();
($stmt->prepare($query))|| fail('An error occurred: MySQL prepare', $db->error);
$stmt->bind_param("s",$username)|| fail('An error occurred: MySQL bind_param', $db->error);
$stmt->execute()|| fail('An error occurred: MySQL execute', $db->error);
$stmt->bind_result($screenname, $url, $created, $status, $address, $city, $bday, $education, $relation, $gender, $profile, $settinga, $ssettingb)|| fail('An error occurred: MySQL bind_result', $db->error);
$stmt->fetch() || fail('Profile not found');
$stmt->close();
$db->close();
【问题讨论】:
-
表中有多少条记录?
-
目前只有 3 条记录
-
我需要 4gb 的内存有点奇怪,或者这不是试图分配 4294967296 字节在此消息中的意思
-
我找到了答案,bind_result占用了太多内存,$stmt->store_result();解决了,在bind_result之前调用它
-
有些地方根本不对劲——查询 3 条记录不应该占用那么多内存,
store_result只会让情况变得更糟——因为store_result会获取所有结果并将它们保存在 PHP 的内存中,从而使用更多的内存。
标签: php sql memory memory-management