【问题标题】:INSERT INTO SELECT PDO queryINSERT INTO SELECT PDO 查询
【发布时间】:2014-05-18 21:45:43
【问题描述】:

我才刚刚开始用 PHP/MySQl 编写,所以你会从下面的代码中明白,为什么我要更新到 PDO,这里有各种各样的事情。

我已经能够使用 PDO 执行基本的 INSERT,即

$sql=
"INSERT INTO user_collections
('id','user_id','collection_id')
VALUES('',?,?)";

$insertsql=$db_connect->prepare($sql);
$insertsql->execute(array($newUserID,$collection_id));

但我被困在下面的 INSERT INTO... SELECT 查询上。基本上,我从表格中获取信息并从表格中获取信息并尝试插入第二个表格。

$sql=
"INSERT INTO table1 (id,user_id,collection_id,sticker_id,status)
SELECT '', '$newUserID' ,'".$_POST['collection_id']."',t2.sticker_number,'N')."'
FROM table2 t2
WHERE t2.collection_id='".$_POST['collection_id']."'";
$insertsql=mysqli_query($db_connect ,$sql);

我知道以上内容在当前状态下有效,但显然不是最佳设计。谁能帮我把它翻译成PDO?

【问题讨论】:

  • ('id','user_id','collection_id')
  • 如果你返回超过 1 行,你不能像这样选择 where,使用 where in。
  • "但我被困在下面的 INSERT INTO... SELECT 查询上" --- 实际上完全一样:用占位符替换所有变量
  • @RPM: "如果你返回超过 1 行,你就不能在哪里做这样的选择" --- 你为什么这么认为?
  • @zerkms,没关系,我以为他在使用子查询来查询 where。

标签: php mysql pdo


【解决方案1】:

足够简单:

$sql = "
    INSERT INTO `table1` (`id`, `user_id`, `collection_id`, `sticker_id`, `status`)
    SELECT '', ?, ?, `t2`.`sticker_number`, 'N'
    FROM `table2` AS `t2`
    WHERE `t2`.`collection_id` = ?
";

现在只需准备您的查询并将$newUserID、$_POST['collection_id'] 和$_POST['collection_id'] 作为参数传递,您就完成了:)

【讨论】:

    猜你喜欢
    • 2017-03-13
    • 1970-01-01
    • 2020-02-08
    • 1970-01-01
    • 2012-08-22
    • 1970-01-01
    • 2012-01-23
    • 2016-07-27
    • 2014-07-31
    相关资源
    最近更新 更多