powered by simpleCommunicator - 2.0.56     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / SQLite [игнор отключен] [закрыт для гостей] / Невозможно получить данные из только что созданных колонок
1 сообщений из 1, страница 1 из 1
Невозможно получить данные из только что созданных колонок
    #37432499
Gemorroj
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Текущее значение для колонок countProductSelect и countProductInput - INTEGER NOT NULL;
Нужно сделать INTEGER DEFAULT NULL;
Код на PHP ниже.
Проблема в том, что при попытке обновления данных в countProductSelect и countProductInput из временных колонок countProductSelectTmp и countProductInputTmp получаю ошибку "no such column: countProductSelectTmp".
Как бороться? Или может быть есть более грамотные алгоритмы решения изначальной задачи?
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
    /**
     * Обновление базы данных
     * 
     * @return bool
     */
    protected  function  _updateDB()
    {
// ...
            $version = '3.8.4.0';

            $this->_pdo-> exec ('
                ALTER TABLE data ADD optionalCountProduct INTEGER DEFAULT NULL;
                ALTER TABLE data ADD countProductSelectTmp INTEGER DEFAULT NULL;
                ALTER TABLE data ADD countProductInputTmp INTEGER DEFAULT NULL;
                UPDATE data SET countProductSelectTmp = countProductSelect, countProductInputTmp = countProductInput;
            ');

            $this->_deleteSQLIteColumn( array ('countProductSelect', 'countProductInput'));

            // Тут баг
            // countProductSelect и countProductInput не могут получить значения countProductSelectTmp и countProductInputTmp
            $this->_pdo-> exec ('
                ALTER TABLE data ADD countProductSelect INTEGER DEFAULT NULL;
                ALTER TABLE data ADD countProductInput INTEGER DEFAULT NULL;
                UPDATE data SET countProductSelect = countProductSelectTmp, countProductInput = countProductInputTmp;
                UPDATE version SET id = "' . $version . '";
            ');

            $this->_deleteSQLIteColumn( array ('countProductSelectTmp', 'countProductInputTmp'))

         return   true ;
    }


    /**
     * Удаляем колнку из SQLite таблицы
     * 
     * @param array $column имя колонки для удаления
     * @return bool
     */
    protected  function  _deleteSQLIteColumn( array  $column)
    {
         return  (bool)$this->_pdo-> exec ('
            BEGIN TRANSACTION;
            CREATE TEMPORARY TABLE backup(' . $this->_getFullColumnsString() . ');
            INSERT INTO backup SELECT ' . $this->_getShortColumnsString() . ' FROM data;
            DROP TABLE data;
            CREATE TABLE data(' . $this->_getFullColumnsString($column) . ');
            INSERT INTO data SELECT ' . $this->_getShortColumnsString($column) . ' FROM backup;
            DROP TABLE backup;
            COMMIT;
        ');
    }
...
Рейтинг: 0 / 0
1 сообщений из 1, страница 1 из 1
Форумы / SQLite [игнор отключен] [закрыт для гостей] / Невозможно получить данные из только что созданных колонок
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]