准备要添加到数据库的字符串数组
Preparing an array of strings to add to database
我有以下数组要添加到数据库中。
$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");
然后我得到以下错误:
致命错误:第 12
行 /home/filepath/file.php 中允许的 134217728 字节内存耗尽(已尝试分配 150994944 字节)
我不确定为什么当数组具有自定义键 "first" 时会出现此错误。如果我手动对每个数组值使用 addslashes,我不会得到这个错误,但是每当我把它放在 for 循环中时,我都会得到错误。
有没有人有办法将 addslashes 应用于每个数组值?我试过 mysqli_real_escape_string 而不是 addslashes 但我得到了同样的错误。
如评论中所述,您应该使用带有绑定变量的准备语句,而不是手动转义您的值(使用错误的函数...)。
您出错的原因是您生成了一个永无止境的循环。
起初你的数组有 3 个元素,但是当你使用数字 for
循环而不是 foreach
时,在前两次迭代中你将转义最后 2 个值,索引 0
和 1
。在第三次迭代中,您尝试使用键 2
转义数组中的元素,因为 $i
是 2
.
但是您的数组中没有包含键 2
的元素。所以你添加了第四个元素。之后每次迭代都会发生这种情况;你添加新元素,$i
永远不会达到数组的计数,导致你循环直到内存用完。
我有以下数组要添加到数据库中。
$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");
然后我得到以下错误:
致命错误:第 12
行 /home/filepath/file.php 中允许的 134217728 字节内存耗尽(已尝试分配 150994944 字节)我不确定为什么当数组具有自定义键 "first" 时会出现此错误。如果我手动对每个数组值使用 addslashes,我不会得到这个错误,但是每当我把它放在 for 循环中时,我都会得到错误。
有没有人有办法将 addslashes 应用于每个数组值?我试过 mysqli_real_escape_string 而不是 addslashes 但我得到了同样的错误。
如评论中所述,您应该使用带有绑定变量的准备语句,而不是手动转义您的值(使用错误的函数...)。
您出错的原因是您生成了一个永无止境的循环。
起初你的数组有 3 个元素,但是当你使用数字 for
循环而不是 foreach
时,在前两次迭代中你将转义最后 2 个值,索引 0
和 1
。在第三次迭代中,您尝试使用键 2
转义数组中的元素,因为 $i
是 2
.
但是您的数组中没有包含键 2
的元素。所以你添加了第四个元素。之后每次迭代都会发生这种情况;你添加新元素,$i
永远不会达到数组的计数,导致你循环直到内存用完。