【问题标题】: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我想将表单中的数据插入到表中,然后从另一个表中选择另一个数据并使用 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 呢?

标签: php mysql


【解决方案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...单引号有效...
      • 删除引号只会使其成为裸字符串,并且可能还会出现语法错误。
      猜你喜欢
      • 2013-03-04
      • 1970-01-01
      • 2016-10-16
      • 2014-12-04
      • 1970-01-01
      • 2013-02-20
      • 1970-01-01
      • 1970-01-01
      • 2014-02-17
      相关资源
      最近更新 更多