消毒数组

时间:2011-07-17 21:13:28

标签: php mysql

我有一个动态生成的表单。最终用户将能够将员工详细信息提交到数据库。所以数组$ 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?

1 个答案:

答案 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);