SQLite перестала работать после обновления

Насколько я знаю, даже унифицированный на основе Compiz вряд ли будет работать в виртуальной машине (я спросил об этом в UDS и сказал, что compiz не запускается на виртуальных машинах.)

4
задан 7 May 2012 в 18:44

4 ответа

Расширения

В соответствии с страницей расширения специализированных баз данных поставщика на сайте PHP существуют два расширения SQLite:

SQLite SQLite3

SQLite [ ! d4] extension - это более новая замена SQLite, которая Специфические расширения базы данных поставщиков :

Расширение SQLite включено по умолчанию с PHP 5.0. Начиная с PHP 5.4, расширение SQLite доступно только через PECL.

Расширения

Теперь некоторые практические соображения. Давайте посмотрим на конфигурацию веб-сервера по умолчанию, которая была установлена ​​с помощью:

sudo apt-get install apache2 php5 php5-sqlite

SQLite

# php --ri sqlite

SQLite

SQLite support => enabled
PECL Module version => 2.0-dev
SQLite Library => 2.8.17
SQLite Encoding => UTF-8

# php --ri sqlite3

sqlite3

SQLite3 support => enabled
SQLite3 module version => 0.7-dev
SQLite Library => 3.6.22

Ubuntu 12.04:

[ f3]

Итак, установка PHP по умолчанию Ubuntu 12.04 по умолчанию (начиная с записи - версия 5.3.10) уже не имеет расширения sqlite как встроенного. Вышеприведенный вывод указывает, что присутствует только расширение sqlite3, которое пришло из php5-sqlite пакета.

Решение

Выберите свое зло:

Правильный подход в долгосрочной перспективе - это адаптировать код, чтобы заставить его работать под SQLite3. Изменения были бы незначительными, но это может привести к нежелательной работе с копированием в стиле палитры большого количества файлов. Если это так, и право здесь не является правильным словом, решение 2 для вас. Установите устаревшее расширение из PECL.
6
ответ дан 25 May 2018 в 11:57
  • 1
    Спасибо, но это не так, я правильно установил php5-sqlite. Хорошая попытка, хотя! – SteeveDroz 7 May 2012 в 18:10
  • 2
    Вы определили свой собственный класс SQLiteDatabase? Задавая это, потому что для построения SQLiteDatabase обычно используется эта функция - sqlite_open(). Что произойдет, если вы просто замените SQLiteDatabase на sqlite_open? – Andrejs Cainikovs 7 May 2012 в 18:24
  • 3
    Привет! Нет, я не создал свой собственный класс SQLiteDatabase. – SteeveDroz 7 May 2012 в 18:25
  • 4
    Затем попробуйте заменить SQLiteDatabase на sqlite_open. – Andrejs Cainikovs 7 May 2012 в 18:26
  • 5
    Спасибо, большое спасибо. Следующая ошибка - Fatal error: Call to undefined method SQLite3::queryExec(), которая решена с учетом того, что вы сказали о совместимости классов. @ Андрэйс Кайниковс, ты действительно заслужил свою награду! Спасибо за длинный поиск. – SteeveDroz 8 May 2012 в 19:07

После ответа Андрея Кайникова и настоятельно советуем вам обновить код, вот несколько примеров того, какую работу следует выполнять при переносе из класса SQLiteDatabase (библиотека sqlite) в класс SQLite3 (библиотека SQLite3).

Например:

SQLiteDatabase -> SQLite3, SQLiteDatabase::unbufferedQuery -> SQLite3::query, SQLiteResult::fetchAll(SQLITE_*) -> SQLite3Result::fetchArray(SQLITE3_*) и т. д.

Что касается выборки, в старом sqlite мы имели:

$rowsIMEI = $db->unbufferedQuery($imeiSQL)->fetchAll(SQLITE_ASSOC);

foreach($rowsIMEI as $r)
{
    ...
}

Хотя в новом SQLite3 мы должны:

$rowsIMEI = $db->query($imeiSQL);

while($r = $rowsIMEI->fetchArray(SQLITE3_ASSOC))
{
    ...
}

Другие изменения требуют

Прежде чем начать, вы должны сначала использовать инструмент, такой как SQLite3 , чтобы преобразовать ваш файл базы данных из От 2,1 до 3,0. Размер может быть снижен даже на половину, поэтому я думаю, что это то, за что стоит бороться.

1
ответ дан 25 May 2018 в 11:57
  • 1
    Спасибо. Я понял. Я не могу понять, почему они изменили SQLiteDatabase::singleQuery на SQLite3::querySingle, я все еще злюсь на них, потому что я должен проверять каждый раз, я не могу вспомнить, что есть. – SteeveDroz 16 May 2013 в 18:38
  • 2
    О, я считаю, что это не их (команда PHP), которые внесли изменения. Я думаю, что они только что написали новый набор оберток над новой версией sqlite lib. Вы должны пойти в sqlite.org , чтобы обвинить автора оригинального SQLite! :] – trejder 16 May 2013 в 19:09

Решение (НЕ для производства, просто для игры): 1. Получите деб файл «php5-sqlite» от ubuntu11.04 или любого другого. 2. Извлеките его и найдите файл sqlite.so. Вы можете получить sqlite.so в другим способом, например, из вашей старой системы - 3. Поместите sqlite.so в / usr / lib / php5 / 20090626 + lfs / 4. Добавьте это в php.ini (/etc/php5/apache2/php.ini):

extension=sqlite.so
0
ответ дан 25 May 2018 в 11:57

Следуя Andrejs Cainikovs , ответьте и настоятельно советуем вам обновить код, вот несколько примеров того, какую работу следует выполнять при миграции из класса SQLiteDatabase ( sqlite в библиотеку SQLite3 ( библиотека SQLite3 ).

Например:

  • SQLiteDatabase -> SQLite3,
  • SQLiteDatabase::unbufferedQuery -> SQLite3::query,
  • SQLiteResult::fetchAll(SQLITE_*) -> SQLite3Result::fetchArray(SQLITE3_*) и т. д.

Что касается выборки, в старых SQLite у нас было:

$rowsIMEI = $db->unbufferedQuery($imeiSQL)->fetchAll(SQLITE_ASSOC);

foreach($rowsIMEI as $r)
{
    ...
}

Хотя в новом SQLite3 мы должны:

$rowsIMEI = $db->query($imeiSQL);

while($r = $rowsIMEI->fetchArray(SQLITE3_ASSOC))
{
    ...
}

Другие изменения требуют аналогичных объем работы, поэтому это не должно быть жизненным процессом.

Прежде чем начать, вы должны сначала использовать инструмент, например SQLite Studio , для преобразования вашего файла базы данных из От 2,1 до 3,0. Размер может быть снижен даже на половину, поэтому я думаю, что это то, за что нужно бороться.

1
ответ дан 10 August 2018 в 07:28

Другие вопросы по тегам:

Похожие вопросы: