您好 我有一个脚本,它返回存储在mysql表中的所有记录。这个脚本在我的xampp服务器上工作得非常好,它有一个标准的128MB内存限制。
致命错误:第37行的/websites/LinuxPackage02/nw/cc/_u/nwcc-uk.org/public_html/code/Article.php内存不足(分配524288)(试图分配4294967294字节)
但是当它上传到网络融合myserverworld平台时,它会崩溃。我该如何调试这样的问题?为什么要分配4GB的内存?奇怪的是,我的开发服务器只有2GB,所以怎么能分配4.
public function getActivity($id,$language='ch')
{
$mysqli = new Database();
$mysqli->connect();
$mysqli->query("SET character_set_results=utf8");
$sql = ($language == 'ch') ? 'SELECT id,title,text,date,author FROM article_chinese WHERE id=?': 'SELECT id,title,text,date,author FROM article_english WHERE id=?';
if ($stmt = $mysqli->prepare("$sql")) {
$stmt->bind_param("i", $id);
/* execute query */
$stmt->execute();
/* bind result variables */
$stmt->bind_result($id,$title,$text,$date,$author);
/* fetch value */
$stmt->fetch();
$results = array($id,$title,$text,$date,$author);
$stmt->close();
$mysqli->close();
return $results;
/* close statement */
}
}
答案 0 :(得分:0)
它试图准确分配4GB(4294967294/1024/1024/1024 = 4)的内存这一事实令人怀疑。 Article.php中第37行的内容是什么,以及它尝试从数据库中获取多少行?
答案 1 :(得分:0)
我偶尔会遇到同样的问题,我偶然发现了这个帖子在php.net:
andrey在php dot net 07-Oct-2005 12:38
如果您选择LOB,请使用以下执行顺序,否则您将面临风险 mysqli分配更多实际使用的内存
1)prepare()2)execute()3)store_result()4)bind_result()
如果你跳过3)或交换3)和4)那么mysqli将分配内存 对于最小长度的列,255为tinyblob,64k 对于blob(仍然可以),对于MEDIUMBLOB来说是16MByte - 非常多,4G用于 LONGBLOB(如果你有这么多记忆,那就好了)。使用此查询 当有LOB时订购有点慢,但这不是价格 在几秒钟内内存耗尽。
这解释了为什么它试图分配如此多的内存;我猜你的一个领域是一个blob?然后解决方案(正如您自己写的那样)是在绑定结果之前使用store_result()
。