我想将表单中的数据插入到表中,然后从另一个表中选择另一个数据并使用 PHP 插入到第三个表中
Posted
技术标签:
【中文标题】我想将表单中的数据插入到表中,然后从另一个表中选择另一个数据并使用 PHP 插入到第三个表中【英文标题】:I want to insert a data from a form into a table, and select another data from another table and insert into third table using PHP 【发布时间】:2016-11-22 18:58:55 【问题描述】:我有三个相关的表“users”、“category”和“interest_area”;我想将表单中的数据插入“users”表,然后从“category”表中选择另一个数据并使用php插入“interest_area”表。
它显示的错误是:
错误:INSERT INTO users(user_id, first_name, last_name, Higher_education, user_name, pass_word) VALUES('' , '87878787' , 'iuiu' , 'iuiu' , 'root' , '');INSERT INTO interest_area ( category_id) SELECT category_id FROM category WHERE category_name = 'ASP'; Erreur de syntaxe pr's de 'INSERT INTO interest_area (category_id) SELECT category_id FROM category ' 2
我的 PHP 代码是:
<?php
if (isset($_POST["interest_area"]))
$f_name = $_POST["firstname"];
$l_name = $_POST["last_name"];
$h_education = $_POST["higher_education"];
$i_area = $_POST["interest_area"];
$email = $_POST["email"];
$u_name = $_POST["user_name"];
$p_word = $_POST["pass_word"];
$sql = "INSERT INTO users(user_id, first_name, last_name, higher_education, user_name, pass_word)
VALUES('' , '$f_name' , '$l_name' , '$h_education' , '$username' , '$password');";
$sql .= "INSERT INTO interest_area (category_id)
SELECT category_id FROM category
WHERE category_name = '$i_area';";
if ($conn->query($sql) === TRUE)
echo "New record created successfully";
else echo "Error: " . $sql . "<br>" . $conn->error;
?>
【问题讨论】:
一个查询调用中不能有多个语句。它是针对一种形式的 sql 注入攻击的基本防御机制。您必须有两个 $sql 变量,并为每个变量分别调用query()
。
mysqli_multi_query()
@MarcB 呢?
【参考方案1】:
你必须运行两个 mysqli_query 才能插入
mysqli_query
在插入数据时最好使用准备语句
prepare statement
$f_name = $_POST["firstname"];
$l_name = $_POST["last_name"];
$h_education = $_POST["higher_education"];
$i_area = $_POST["interest_area"];
$email = $_POST["email"];
$u_name = $_POST["user_name"];
$p_word = $_POST["pass_word"];
$user_id = $_POST["user_id"];
$user_id
主键不能为空,不能插入数据;
$sql1 = "INSERT INTO users(user_id, first_name, last_name, higher_education, user_name, pass_word)
VALUES('$user_id' , '$f_name' , '$l_name' , '$h_education' , '$u_name' , '$p_word')";
$sql2 = "INSERT INTO interest_area (category_id)
SELECT category_id FROM category WHERE category_name = '$i_area'";
mysqli_query($con,$sql1);
mysqli_query($con,$sql2)
mysqli_close($con);
【讨论】:
【参考方案2】:您只需将两个 INSERT
语句作为单独的 $conn->query
调用运行,而不是将它们连接到一个调用中。
【讨论】:
【参考方案3】:您需要对多个查询使用 multi_query。
$sql = "INSERT INTO users(user_id, first_name, last_name, higher_education, user_name, pass_word)VALUES('' , '$f_name' , '$l_name' , '$h_education' , '$username' , '$password');";
$sql .= "INSERT INTO interest_area (category_id)
SELECT category_id FROM category WHERE category_name = '$i_area'";
mysqli_multi_query($con,$sql);
mysqli_close($con);
【讨论】:
确保语法正确 - 每个查询都需要在 SQL 语句中使用自己的分号。【参考方案4】:语法错误在这里:
$sql .= "INSERT INTO interest_area (category_id)
SELECT category_id FROM category
WHERE category_name = '$i_area';";
应该是卷曲的...
$sql .= "INSERT INTO interest_area (category_id)
SELECT category_id FROM category
WHERE category_name = $i_area;";
还有两个单独的查询...
【讨论】:
完全错误。 OP 的字符串语法没有问题。这是完全有效的 PHP 对不起...为了更清楚,本店使用 curly...单引号有效... 删除引号只会使其成为裸字符串,并且可能还会出现语法错误。以上是关于我想将表单中的数据插入到表中,然后从另一个表中选择另一个数据并使用 PHP 插入到第三个表中的主要内容,如果未能解决你的问题,请参考以下文章