在同一PDO查询中删除和选择

时间:2014-05-27 17:12:29

标签: php mysql sql pdo

我正在尝试删除帖子,然后选择并显示PDO的其他帖子。我想在一种方法中做到这一点:

    public function remove_and_renew_item(){
    $this->query = $this->conn->prepare('DELETE FROM posts WHERE post_id=:remove_id');
    $this->query = $this->conn->prepare('SELECT * FROM posts WHERE post_id=:next_id');

    $this->query->bindParam(':remove_id', $this->remove_id);
    $this->query->bindParam(':next_id', $this->next_id);
    $this->query->execute();

    echo json_encode($this->query->fetch(PDO::FETCH_ASSOC));
}

但是,我是AJAX报告错误。有问题是因为:

  • 我有两个单独的查询?
  • 它也试图获取查询的删除部分吗?

如果删除单个查询,并且它与bindParam相关,则可以正常工作。但是,他们一起没有。有人能弄清楚他们为什么不能一起工作吗?

3 个答案:

答案 0 :(得分:4)

你用第二个查询覆盖第一个查询。你想做的事情并非不可能,但你做的方式却被打破了。

$this->query1 = $this->conn->prepare('DELETE FROM posts WHERE post_id=:remove_id');
$this->query2 = $this->conn->prepare('SELECT * FROM posts WHERE post_id=:next_id');

答案 1 :(得分:3)

代码不正确 - 您需要两个完全独立的查询...但是您可以准备两个查询,然后在以后的某些行中反复使用它们。

public function __construct() {
    $this->query1 = $this->conn->prepare('DELETE FROM posts WHERE post_id=:remove_id');
    $this->query2 = $this->conn->prepare('SELECT * FROM posts WHERE post_id=:next_id');
}

public function remove_and_renew_item() {

    $this->query1->bindParam(':remove_id', $this->remove_id);
    $this->query2->bindParam(':next_id', $this->next_id);

    $this->query1->execute();
    $this->query2->execute();

   echo json_encode($this->query2->fetch(PDO::FETCH_ASSOC));
}

说过如何做你想做的事情,实际上最好将删除和选择(阅读)的方法分开,你真的在​​不需要的地方添加复杂性。

答案 2 :(得分:0)

选择和删除命令必须单独执行。对于任何数据库引擎都是如此。如果你想从php发送一个命令,用两个sql命令编写一个存储过程,并从php调用它。