php - 转义数组中的变量并将转义值动态分配给原始变量值

标签 php mysql arrays function mysql-real-escape-string

我通常只是在插入数据库之前对每个变量使用mysql_real_escape_string,例如:

    $first_name = mysql_real_escape_string($first_name); // Bill
    $last_name  = mysql_real_escape_string($last_name);  // O'Rielly
    $email      = mysql_real_escape_string($email);      // name@domain.com

    $insert = mysql_query("
                  INSERT INTO `users` (first_name, last_name, email)
                  VALUES ('$first_name', '$last_name', '$email')
              ") or die(mysql_error());

但在某些形式上,我可能有 20 个不同的变量想要转义,所以我希望有一种方法可以使用数组,通过函数运行它来转义每个变量。然后使原始变量($first_name$last_name$email)具有从数组中转义的字符串的值。我想出了以下内容,但这只是我所能得到的。

    $form_array = array($first_name, $last_name, $email);

    print_r($form_array);
    echo("<br />".$last_name."<br />");

    function cleanInput($array) {
        return array_map('mysql_real_escape_string', $array);
    }

    $clean_array = cleanInput($form_array); 

    print_r($clean_array);
    echo("<br />".$clean_array[1]."<br />");

输出如下:

    Array ( [0] => Bill [1] => O'Rielly [2] => name@domain.com ) 
    O'Rielly
    Array ( [0] => Bill [1] => O\'Rielly [2] => name@domain.com ) 
    O\'Rielly

所以,我们可以看到它正确地转义,但我对整个使 $first_name 具有 $clean_array[0] 的值感到困惑,$last_name 的值为 $clean_array[1] 等。

我当然知道我可以写:

    $first_name = $clean_array[0];
    $last_name = $clean_array[1];

但这使得这个数组/函数根本没有意义,因为我也可能像我一直做的那样单独转义每个变量/字符串。所以我希望有一种方法可以在函数中进行某种循环,以根据数组中的内容动态地执行此操作。

因为将来进行验证时我可以

  • 将所有 $_POST 数据分配给变量
  • 将它们放入数组中
  • 通过函数运行数组,所有原始 $_POST 变量现在都具有函数中的转义值
  • 使用开头提到的插入方法,使用变量 $first_name$last_name 等的原始名称。

而不是:

    $insert = mysql_query("
                  INSERT INTO `users` (first_name, last_name, email)
                  VALUES ('$clean_array[0]', '$clean_array[1]', '$clean_array[2]')
              ") or die(mysql_error());

这可能吗?

更新

根据 hakre 关于 compactextract 函数的帖子,我现在得出以下结论:

    $array = compact(array("first_name", "last_name", "email"));
    echo("<strong>Before:</strong><br />First Name: ".$first_name."<br />Last Name: ".$last_name."<br />Email: ".$email."<br /><br />");

    extract(array_map('mysql_real_escape_string', $array), EXTR_OVERWRITE);
    echo("<strong>After:</strong><br />First Name: ".$first_name."<br />Last Name: ".$last_name."<br />Email: ".$email."");

它会输出我想要的以下详细信息:

之前:

名字:比尔

姓氏:奥瑞利

电子邮件:name@domain.com

之后:

名字:比尔

姓氏:奥瑞利

电子邮件:name@domain.com

我尝试将 extract 放入函数中,但效果不一样?

    function cleanInput($array) {

        $clean_array = extract(array_map('mysql_real_escape_string', $array), EXTR_OVERWRITE);
        return $clean_array;

    }

    $array = compact(array("first_name", "last_name", "email"));
    echo("<strong>Before:</strong><br />First Name: ".$first_name."<br />Last Name: ".$last_name."<br />Email: ".$email."<br /><br />");

    cleanInput($array);
    echo("<strong>After:</strong><br />First Name: ".$first_name."<br />Last Name: ".$last_name."<br />Email: ".$email."");

我确信我必须返回提取函数,但我尝试了一些不同的方法,它要么不提供任何输出,要么$last_name只是打印未转义的值。

最佳答案

您可能对 compact 感兴趣和 extract 。两者都允许您将变量作为数组处理。数组很舒服,因为您可以对所有值重复单个操作。

示例:

$vars = array('first_name', 'last_name', 'email');

$first_name = $last_name = $email = 'just some init value';

$array = compact($vars);

foreach($array as &$value)
    $value = str_shuffle($value);
unset($value);

extract($array);

printf("First: %s; Last: %s; Email: %s", $first_name, $last_name, $email); 

输出:

First:  sjivus enta metluoi; Last: i evounes tliuat smj; Email: tleetnumav siuijo s 

关于php - 转义数组中的变量并将转义值动态分配给原始变量值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8029765/

相关文章:

c# - dataGridView 列的总和未在 WindowsFormApplication 中以正确的方式计算

php - 删除过多的行返回

php - zend-server下的popen和poclose

python - 数据没有插入到我的表中

mysql - 如果第一个查询没有生成结果,如何在 mysql 上运行两个查询

Javascript string.replace 不适用于我的数组,我做错了什么?

Php递归数组计数

javascript - 语法错误: missing ) after argument list in javascript function with json response

php - 如何使用 PHP 设置 HTML 选择框的选定值

php - 从命令行和 max_execution_time 运行 PHP 脚本