如何将PHP数组中的值插入MySQL表?

问题描述 投票:1回答:2

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

我最初尝试了以下内容:

$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);

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

php mysql arrays mysqli
2个回答
1
投票

你只是忘了设置正确的引号。这是正确的语法:

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

1
投票

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

你不能混合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);
© www.soinside.com 2019 - 2024. All rights reserved.