我有一个动态生成的表单。最终用户将能够将员工详细信息提交到数据库。所以数组$ fname将包含所有名字,$ lname所有姓氏等。然后将数组插入MySQL,如下所示:
$query = "INSERT INTO workers (date_added, department,fname, lname, rank)
VALUES ";
$fname = count(fname);
for($i=0; $i<$employee_count; $i++) {
$query .= "(NOW(),'$department','{$fname[$i]}','{$lname[$i]}','{$rank[$i]}'),\n";
}
这很有用很棒,直到我们遇到像单引号这样的危险字符,例如MC'Mahon,这会使查询失败。我不能使用许多常规函数,例如mysqli_real_escape_string(),因为这是一个数组。 有没有办法清理数组,即逃避数组中的任何危险字符,以便在将每个数组推入循环之前清理每个数组,然后将每个数组拆分成字符串然后输入MySQL?
答案 0 :(得分:13)
您可以在for
循环之前使用array_map
。该函数将回调应用于数组的每个值。在这种情况下,回调将是mysqli_real_escape_string
。
$fname = array_map('mysqli_real_escape_string', $fname);
$lname = array_map('mysqli_real_escape_string', $lname);
$rank = array_map('mysqli_real_escape_string', $rank);
根据以下评论进行更新:
要在程序模式下使用mysqli_real_escape_string
,您需要传递“链接”,以便创建自定义函数:
function array_map_callback($a)
{
global $dbc;
return mysqli_real_escape_string($dbc, $a);
}
$fname = array_map('array_map_callback', $fname);
$lname = array_map('array_map_callback', $lname);
$rank = array_map('array_map_callback', $rank);