【问题标题】:How to insert values in a PHP array to a MySQL table?如何将 PHP 数组中的值插入 MySQL 表?
【发布时间】:2017-12-07 05:53:41
【问题描述】:

我正在创建一个注册表单,其中包含姓名、电子邮件和电话号码字段。为了检查用户输入的有效性,我有一个函数validate_input(),它返回一个数组$arr,其中包含用户输入的输入(如果用户输入有效)。然后将$arr 传递给一个单独的函数,该函数将arr 中的值插入到MySQL 表user 中,其中包含nameemailphone 的字段。

我最初尝试了以下方法:

$insert_query = "INSERT INTO user (name, email, phone)
                 VALUES ('$arr['name']',
                         '$arr['email']',
                         '$arr['phone']')";
$run_insert_query = mysqli_query($con, $insert_query);

但这没有用。一些阅读表明这是将数组值插入数据库的错误方法。于是我又尝试了以下方法(based on the accepted answer here):

$escaped_values = array_map('mysql_real_escape_string', array_values($arr));
$arr_values  = implode(",", $escaped_values);

$insert_query = "INSERT INTO user (name, email, phone) VALUES ($arr_values)";
$run_query = mysqli_query($con, $insert_query);

但这也不起作用。关于如何完成这项工作的任何想法?

【问题讨论】:

  • 两种方法都有效,两种情况都只是语法错误
  • @rtfm 你能用正确的语法发布答案吗?

标签: php mysql arrays mysqli


【解决方案1】:

您只是忘记正确设置引号。 这是正确的语法:

$insert_query = "INSERT INTO user (name, email, phone) 
                 VALUES ('".$arr['name']."',
                         '".$arr['email']."', 
                         '".$arr['phone']."')";

【讨论】:

    【解决方案2】:

    在您的 insert dml 语句中,字符串和 格式化 日期必须用单引号引起来。由于 mysql 会尝试将字符串动态转换为整数或浮点数,因此您可以 try 引用所有内容 - 但即使它可以正常工作,这也会在您最不期望的时候咬住您。您的第二个代码块也取决于以您期望的顺序呈现的数据。通常这不太可能改变,但它是糟糕的编程。

    您不能混合使用 mysqli_ 和 mysql_ 函数。阅读 php 告诉你的错误和警告。

    假设您的 validate_input() 函数还在数据上调用 mysql[i]_real_escape_string() 以防止 sql 注入(也是不好的编程习惯 - 您应该验证输入和转义输出),那么您只需要修复您的语义第一个查询中的代码:当关联数组索引已经包含在“....”中时,不应引用它们:

    $insert_query = "INSERT INTO user 
     (name, email, phone)  
     VALUES ('$arr[name]', '$arr[email]', '$arr[phone]')";
    $run_insert_query = mysqli_query($con, $insert_query);
    

    【讨论】:

    • 最好还是为数组键使用引号
    • php.net/manual/en/language.types.array.php 阅读“数组注意事项¶”部分
    • @symcbean 谢谢。您能否解释一下答案中“转义输出”的含义?如果我问任何菜鸟问题,请多多包涵 - 我对网络开发很陌生。
    • @rtfm:我已经读过了——我建议你也花点时间读一读。并了解它在告诉你什么。
    • @rtfm:继续阅读:echo "Bad: {$array['$i']}\n"; echo "Good: {$array[$i]}\n";
    猜你喜欢
    • 2018-02-01
    • 1970-01-01
    • 1970-01-01
    • 2019-06-17
    • 2016-05-26
    • 2016-09-18
    • 2017-07-03
    • 2011-12-05
    • 2016-10-19
    相关资源
    最近更新 更多