准备要添加到数据库的字符串数组



我有以下数组要添加到数据库中。

$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 个值、索引01。在第三次迭代中,您尝试使用键2转义数组中的元素,因为$i 2

但是数组中没有具有键2的元素。所以你添加了第四个元素。此后的每次迭代都会发生这种情况;您添加新元素,$i将永远不会达到数组的计数,从而导致您循环直到内存耗尽。

最新更新