我有以下数组要添加到数据库中。
$arr = array("a'a","b'b","c'c");
为了在添加到数据库之前转义单引号,我使用它 for 循环
for ($i=0; $i < count($arr); $i++) {
$arr[$i] = addslashes($arr[$i]);
}
而且效果很好。但是,如果将原始数组更改为:
$arr = array("first"=>"a'a","b'b","c'c");
然后我得到以下错误:
致命错误:允许的内存大小为 134217728 字节已耗尽(尝试分配 150994944 字节),位于第 12 行的/home/filepath/file.php
我不确定为什么当数组具有"first"的自定义键时出现此错误。如果我手动对每个数组值使用添加斜杠,我不会收到此错误,但每当我将其放入 for 循环中时,我都会收到错误。
有没有人可以解决将添加斜杠应用于每个数组值的方法?我尝试了mysqli_real_escape_string而不是添加斜杠,但我遇到了同样的错误。
如注释中所述,您应该使用带有绑定变量的预准备语句,而不是手动转义您的值(使用错误的函数......
你犯错的原因是你产生了一个永无止境的循环。
起初,您的数组有 3 个元素,但是当您使用数字for
循环而不是foreach
时,在前两次迭代中,您将转义最后 2 个值、索引0
和1
。在第三次迭代中,您尝试使用键2
转义数组中的元素,因为$i
2
。
但是数组中没有具有键2
的元素。所以你添加了第四个元素。此后的每次迭代都会发生这种情况;您添加新元素,$i
将永远不会达到数组的计数,从而导致您循环直到内存耗尽。