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

时间:2019-01-05 20:13:55

标签: php database escaping addslashes

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

$arr = array("a'a","b'b","c'c");

为了在添加到数据库之前转义单引号,我将其用于循环

for ($i=0; $i < count($arr); $i++) { 
  $arr[$i] = addslashes($arr[$i]);  
}

它工作正常。但是,如果将原始数组更改为此:

$arr = array("first"=>"a'a","b'b","c'c");

然后出现以下错误:

致命错误:在第12行的/home/filepath/file.php中,耗尽了134217728字节的内存(尝试分配150994944字节)

我不确定当数组的自定义键为“ first”时为什么会出现此错误。如果我对每个数组值手动使用addlashes,则不会收到此错误,但是每当我将其放入for循环中时,我都会收到此错误。

有人能解决对每个数组值应用加号吗?我尝试使用mysqli_real_escape_string而不是appslashes,但是出现了相同的错误。

1 个答案:

答案 0 :(得分:1)

如评论中所述,您应该使用带绑定变量的预备语句,而不是手动转义值(使用错误的函数...)。

发生错误的原因是,您已生成一个永无止境的循环。

起初,您的数组具有3个元素,但是当您使用数字for循环而不是foreach时,在前两次迭代中,您将转义最后2个值,即索引{{1} }和0。在第三次迭代中,您尝试使用键1对数组中的元素进行转义,因为2$i

但是您的数组中没有具有键2的元素。因此,您添加了第四个元素。在那之后的每次迭代中都会发生这种情况;您添加新元素,2将永远无法达到数组的数量,从而导致您循环执行,直到内存用尽。