【问题标题】:How can I use several SQL SELECT queries as WHERE clauses in php?如何在 php 中使用多个 SQL SELECT 查询作为 WHERE 子句?
【发布时间】:2019-11-20 20:41:07
【问题描述】:
$sql = "INSERT into x (y,z,t) 
VALUES ((SELECT userID FROM users WHERE username ='".$usersql."'),"
."'"."(SELECT itemID from items WHERE category ='".$category."'),"
."'".$amountdays."')";

感谢您的宝贵时间。

【问题讨论】:

  • 可能."'".(SELECT itemID from items ...应该是."(SELECT itemID from items ...
  • 但是,如果 2 个子查询中的任何一个返回多于一行,则查询将失败。
  • 只需调试您的$sql 变量并直接在数据库上运行结果以查看问题所在。实际上首先在数据库上创建一个工作查询,然后确保你的 $sql 生成相同的值

标签: php sql phpmyadmin


【解决方案1】:

您应该将 PDO 或 mysqli 与准备好的语句一起使用。然后,您可以为您的值定义变量并在查询后设置它们。这使它更具可读性,并且可以防止代码中的 sql 注入。

https://www.php.net/manual/de/pdo.prepared-statements.php

$stmt = $dbh->prepare("INSERT into x (y,z,t) 
VALUES (
    SELECT userID FROM users WHERE username = :username, 
    SELECT itemID FROM items WHERE category = :category, 
    :amountdays
)";

$stmt->bindParam(':username', $username);
$stmt->bindParam(':category', $category);
$stmt->bindParam(':amountdays', $amountdays);

类似的东西。

【讨论】:

    【解决方案2】:

    稍微格式化一下会有很长的路要走:

    $sql = "INSERT into x 
      (
        y,
        z,
        t
      ) VALUES (
        (SELECT userID FROM users WHERE username = ?),
        (SELECT itemID from items WHERE category = ?),
        ?
      );
    ";
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-02-27
      • 2019-08-08
      • 1970-01-01
      • 2021-11-16
      • 2018-12-12
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多