PHP PDO и DELETE с in () не работают - PullRequest
0 голосов
/ 03 марта 2012

Вот код для класса:

    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);
    }

// Получить все идентификаторы детей из БД и сохранить их в массиве

    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;
    }

// Вставить массив в строку идентификатора и выбросить его в запросе

    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.

// Строка вывода SQL, если отображается:

DELETE FROM `shop_categories` WHERE id IN (11,6)

// Если я вручную добавлю это в базу данных, она будет работать так, как задумано, поэтому проблема должна быть где-то в инструкции PDO ... Кто-нибудь может мне помочь?

1 Ответ

4 голосов
/ 03 марта 2012

Вы можете использовать FIND_IN_SET для этого:

DELETE FROM `shop_categories` WHERE FIND_IN_SET(id, :id)"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...