我正在调用一个php脚本,每当我调用一个列(其中包含一个url,例如 http://www.sample.com/something )时,该脚本就会中断。
我得到的错误是 PHP致命错误:允许的内存大小为134217728字节耗尽(尝试分配4294967296字节)
我不想通过扩展内存来解决问题,我怀疑无论如何都会解决问题。
我尝试执行预准备语句后出现问题(在此行代码后,我的脚本中断了$stmt->execute();
问题肯定是因为我的网址列中的斜线字符'/'。如果我在没有“/”符号的情况下调用任何其他列,则语句将正确执行并呈现数据。
以下是我的更多代码:
$stmt = $conn->prepare("
SELECT post.id, content_cite, url FROM post, data
WHERE post.id = data.post_FK AND data.age < ? AND data.age <> ?");
$stmt->bind_param("ii", $one, $two);
// params
$one = 35;
$two = 0;
$stmt->execute();
// select header params
$stmt->bind_result($col_1, $col_2, $col_3);
while ($stmt->fetch()) {
$json = array(
'id' => $col_1,
'content_cite' => $col_2,
'url'=> $col_3
);
array_push($contentArray, $json);
}
正如我所说, url 列是问题所在。如果此语句在SQL编辑器中运行,则它会毫无问题地执行。
有什么想法在这里发生了什么?
答案 0 :(得分:0)
我看不到/
字符与此有任何关系,但我会打赌url
列比您尝试的其他列更大,因此请检索其中的许多字符可能会让你超过内存限制。
尝试更改:
FROM post, data
WHERE post.id = data.post_FK
要:
FROM post INNER JOIN data
ON post.id = data.post_FK
用于更高效的JOIN
操作。
答案 1 :(得分:0)
这解决了这个问题:
$stmt = $conn->prepare("
SELECT post.id, content_cite, url FROM post, data
WHERE post.id = data.post_FK AND data.age < ? AND data.age <> ?");
$stmt->bind_param("ii", $one, $two);
// params
$one = 35;
$two = 0;
$stmt->execute();
// if you have longtext as a type in your database you must call this method
mysqli_stmt_store_result($stmt);
$stmt->bind_result($col_1, $col_2, $col_3);
while ($stmt->fetch()) {
$json = array(
'id' => $col_1,
'content_cite' => $col_2,
'url'=> $col_3
);
array_push($contentArray, $json);
}
Tnx Prepared mysqli select statement on longtext field is coming back empty