我正在尝试删除帖子,然后选择并显示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相关,则可以正常工作。但是,他们一起没有。有人能弄清楚他们为什么不能一起工作吗?
答案 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调用它。