我正在创建一个注册表单,其中包含姓名,电子邮件和电话号码字段。为了检查用户输入的有效性,我有一个函数validate_input()
,它返回一个包含用户输入的输入的数组$arr
(如果用户输入有效)。然后将$arr
传递给一个单独的函数,该函数将arr
中的值插入到包含user
,name
和email
字段的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);
但这也不起作用。关于如何使这项工作的任何想法?
你只是忘了设置正确的引号。这是正确的语法:
$insert_query = "INSERT INTO user (name, email, phone)
VALUES ('".$arr['name']."',
'".$arr['email']."',
'".$arr['phone']."')";
在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);