我想将表单中的数据插入到表中,然后从另一个表中选择另一个数据并使用 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-&gt;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 插入到第三个表中的主要内容,如果未能解决你的问题,请参考以下文章

访问表单,从另一个表中搜索记录并插入当前表单中的字段

(Golang)将数组中的所有行插入到表中

对第一个表的数据进行排序后从另一个表插入到表中

如何使用 c#asp.net 将数据库中的数据插入到表中?

从其他表中选择表单中的选项

根据带有参数的选择(唯一键)从另一个表中插入值