【问题标题】:use insert and select in the same query [duplicate]在同一个查询中使用插入和选择[重复]
【发布时间】:2016-08-13 19:52:00
【问题描述】:
$new_id = mysqli_insert_id($dbc)    
foreach ($_POST['d_specialty'] as $key => $value) {
      $q = "INSERT INTO d_specialty (d_id, s_id) VALUES ($new_id, (SELECT specialty.id FROM specialty WHERE specialty.name = $value))";
      $r = mysqli_query($dbc,$q);

我想插入两个值,第一个是变量,第二个是select语句但是上面的代码不起作用...

【问题讨论】:

  • 原因可能是您的子查询返回多于 1 行。
  • 警告:当使用mysqli 时,您应该使用parameterized queriesbind_param 将用户数据添加到您的查询中。 请勿使用字符串插值或连接来完成此操作,因为您创建了严重的SQL injection bug切勿$_POST$_GET 数据直接放入查询中,如果有人试图利用您的错误,这可能会非常有害。

标签: php mysql sql mysqli


【解决方案1】:

首先,使用insert . . . select

INSERT INTO d_specialty (d_id, s_id)
    SELECT $new_id, specialty.id
    FROM specialty
    WHERE specialty.name = $value;

其次,对查询进行参数化,以便$new_id$value 作为参数传入,而不是直接放入查询字符串中。一个原因是为了防止 SQL 注入攻击。另一个非常重要的原因是防止潜在的语法错误。

【讨论】:

  • 你的意思是创建一个查询函数并以变量作为参数调用它?
  • 那些变量不是已经parameterized了吗?
  • 他们不是@sgeddes
  • @OmarAlhadidy -- 参数化查询并不意味着使用function 并传递它们...话虽如此,我不经常使用php,所以我不确定。这看起来正确使用 ? 代替:stackoverflow.com/questions/728229/parameters-in-mysqli
  • 谢谢你,我会多搜索一点,然后更正它们@sgeddes
【解决方案2】:

使用insert into select 时,您不需要使用values。删除它,然后将 $new_id 变量移动到 select 语句中:

INSERT INTO d_specialty (d_id, s_id) 
SELECT $new_id, specialty.id 
FROM specialty 
WHERE specialty.name = $value

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-04-12
    • 2013-11-20
    • 1970-01-01
    • 2013-11-23
    • 1970-01-01
    • 2018-01-04
    • 1970-01-01
    相关资源
    最近更新 更多