【发布时间】:2017-12-26 18:32:45
【问题描述】:
我正在调用一个 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的列类型是什么?longtext? -
哪种字符串类型? varchar?斑点?文本?等等?
-
longtext,对不起各位...这会导致问题吗?
-
哦,我知道@CMiller 要去哪里了。如果您在
LONGTEXT上使用bindResult(),PHP 不知道其中可能会转储多大的结果,因此它会尝试分配最大大小的内存段来容纳它。对于LONGTEXT,这是 4GB。跳过bindResult()并在循环中使用$row = fetch()。 -
天啊,我从来没有想过!我会努力解决这个问题... tnx 计算机科学的家伙...
标签: php mysql sql prepared-statement