Помогите исправить ошибку

Тема в разделе "Как сделать...", создана пользователем mmmppp, 13 авг 2014.

Статус темы:
Закрыта.
  1. mmmppp

    mmmppp Постоялец

    Заблокирован
    Регистр.:
    11 ноя 2011
    Сообщения:
    65
    Симпатии:
    12
    На сайте при удалении категорий вылазит ошибка:
    MySQL Query:UPDATE [pre]auto SET status=0 WHERE catid IN (6)
    MySQL Error:Table 'cms.[pre]auto' doesn't exist MySQL Errno:0
    Message:MySQL Query Error

    Подскажите пожалуйста, куда копать, чтобы исправить?
     
  2. latteo

    latteo Эффективное использование PHP, MySQL

    Moderator
    Регистр.:
    28 фев 2008
    Сообщения:
    1.403
    Симпатии:
    1.185
    Запрос содержит некорректное имя таблицы [pre]auto
    Смотреть в скрипте как формируется этот SQL возможно там ошибка.
    Задать в конфигах префикс таблиц в БД, если его нет то задать как пустую строку.
     
    Шумадан нравится это.
  3. mmmppp

    mmmppp Постоялец

    Заблокирован
    Регистр.:
    11 ноя 2011
    Сообщения:
    65
    Симпатии:
    12
    Нет, с префиксом всё нормально, [pre] это так выводится показ префикса без вывода действительного названия...
    Дело ещё в том, что на сайте есть аналогичный модуль, только с другим названием-там всё работает нормально, а в этом показывает ошибку, хотя сама категория удаляется.
     
  4. Шумадан

    Шумадан Хабарра!!11

    Регистр.:
    6 фев 2008
    Сообщения:
    1.722
    Симпатии:
    2.097
    а так работает?
    Код:
    UPDATE `[pre]auto` SET status=0 WHERE catid IN (6)
     
    Джуга и Ctrogan нравится это.
  5. mmmppp

    mmmppp Постоялец

    Заблокирован
    Регистр.:
    11 ноя 2011
    Сообщения:
    65
    Симпатии:
    12
    Ну если я не ошибаюсь, то эта строка в ошибке-это показано действие-при котором и происходит ошибка, в данном случае это удаление категории с ID 6
     
  6. Шумадан

    Шумадан Хабарра!!11

    Регистр.:
    6 фев 2008
    Сообщения:
    1.722
    Симпатии:
    2.097
    на самом деле
    Код:
    MySQL Error:Table 'cms.[pre]auto' doesn't exist MySQL Errno:0
    у вас в названии таблички спецсимвол, поэтому советовал обвернуть название в `
     
    Джуга и Ctrogan нравится это.
  7. mmmppp

    mmmppp Постоялец

    Заблокирован
    Регистр.:
    11 ноя 2011
    Сообщения:
    65
    Симпатии:
    12
    В таблице именно так, как вы советуете.
     
  8. Шумадан

    Шумадан Хабарра!!11

    Регистр.:
    6 фев 2008
    Сообщения:
    1.722
    Симпатии:
    2.097
    покажите сам код запроса непосредственно перед выполнением, а то у вас
    Код:
    UPDATE [pre]auto SET status=0 WHERE catid IN (6)
    а в идеале нужно
    Код:
    UPDATE `[pre]auto` SET `status` = 0 WHERE `catid` IN (6)
     
    Джуга и Ctrogan нравится это.
  9. mmmppp

    mmmppp Постоялец

    Заблокирован
    Регистр.:
    11 ноя 2011
    Сообщения:
    65
    Симпатии:
    12
    PHP:
    function delete($catids) {
            if(
    is_array($catids)) {
                foreach(
    $catids as $catid) {
                    if(isset(
    $this->category[$catid])) $this->delete($catid);
                }
            } else {
                
    $catid $catids;
                if(isset(
    $this->category[$catid])) {
                    
    $this->db->query("DELETE FROM {$this->table} WHERE catid=$catid");
                    
    $arrchildid $this->category[$catid]['arrchildid'] ? $this->category[$catid]['arrchildid'] : $catid;
                    
    $this->db->query("DELETE FROM {$this->table} WHERE catid IN ($arrchildid)");           
                    if(
    $this->moduleid 4$this->db->query("UPDATE ".get_table($this->moduleid)." SET status=0 WHERE catid IN (".$arrchildid.")");
                }
            }
            return 
    true;
        }
     
  10. Шумадан

    Шумадан Хабарра!!11

    Регистр.:
    6 фев 2008
    Сообщения:
    1.722
    Симпатии:
    2.097
    попробуйте так
    PHP:
    $this->db->query("DELETE FROM `{$this->table}` WHERE catid=$catid");
                    
    $arrchildid $this->category[$catid]['arrchildid'] ? $this->category[$catid]['arrchildid'] : $catid;
                    
    $this->db->query("DELETE FROM `{$this->table}` WHERE catid IN ($arrchildid)");        
                    if(
    $this->moduleid 4$this->db->query("UPDATE `".get_table($this->moduleid)."` SET status=0 WHERE catid IN (".$arrchildid.")");
     
    Джуга и Ctrogan нравится это.
Статус темы:
Закрыта.