我正在调用一个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编辑器中运行,则它会毫无问题地执行。
有什么想法在这里发生了什么?
我无法看到/
角色与此有任何关系,但我会打赌url
专栏比你尝试的其他专栏更大,所以检索其中许多可能会让你超过内存限制。
尝试改变:
FROM post, data
WHERE post.id = data.post_FK
至:
FROM post INNER JOIN data
ON post.id = data.post_FK
为了更有效的JOIN
操作。
这解决了这个问题:
$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