【发布时间】:2012-03-02 20:08:19
【问题描述】:
这是该类的代码:
class Delete_Category extends Category {
private $idchain = array();
public function __construct($id) {
parent::__construct();
$this->check_id($id);
$this->get_delete_ids($this->id);
$this->delete_category($this->idchain);
}
//从数据库中获取所有的Children ID,并存储在数组中
private function get_delete_ids($id) {
$this->query = $this->db->prepare("SELECT id FROM `shop_categories` WHERE parent_id = :id");
$this->query->execute(array("id" => $id));
while($result = $this->query->fetch(PDO::FETCH_ASSOC)) {
$this->get_delete_ids($result['id']);
}
$this->idchain[]= $id;
}
// 将数组内插为id字符串,并在查询中抛出
private function delete_category($id_array) {
$id = implode(",",$id_array);
try {
$this->query = $this->db->prepare("DELETE FROM `shop_categories` WHERE id IN (:id)");
$this->query->execute(array(':id' => $id));
}
catch(PDOException $e) {
// log it{
}
}
}
问题是,这总是以仅删除最后一个 ID 结束。该查询似乎正在工作,因为如果我回显它并将 :id 替换为 $id ,它看起来完全没问题。
// 如果回显,则输出 SQL 字符串:
DELETE FROM `shop_categories` WHERE id IN (11,6)
// 如果我手动将它添加到数据库中,它会按预期工作,所以问题必须在 PDO 语句中的某个地方......有人可以帮助我吗?
【问题讨论】:
-
有些地方不能使用准备好的语句变量,这就是其中之一。另外两个(据我所知)是
limit和offset。