Я пытаюсь использовать sqlite из PHP. У меня есть такой простой код:
<?php
$db = new SQLiteDatabase("test2.sdb");
unset($db);
?>
В результате этого кода (который я выполняю в командной строке "php test2.php") я получаю:
Fatal error: Class 'SQLiteDatabase' not found in /var/www/test2.php on line 3
Кто-нибудь знает, как я могу заставить PHP использовать sqlite?
P.S. Вот Я обнаружил, что «поддержка SQLite включена по умолчанию в стандартной компиляции PHP для Linux, начиная с PHP 5.0». И у меня «Версия PHP => 5.2.6-2ubuntu4.6». Таким образом, sqlite должен быть включен, если только "--disable-sqlite". В моем случае вывод «phpinfo ();» вообще не содержит sqlite.
Класс SQLiteDatabase
это объект из sqlite библиотека, поддержка которой была прекращена в PHP 5.4, но в различных системах и конфигурации могла быть отключена в более ранних версиях, так как эта библиотека долгое время помечалась как будет устаревшим.
Библиотека php_sqlite.dll
(Windows) или php_sqlite.so
(Linux) больше не поддерживается в более новых версиях PHP и был заменен на php_sqlite3.dll
или php_sqlite3.so
соответственно.
Ты можешь:
Попытаться найти php_sqlite.dll
(php_sqlite.so
) где-нибудь в Интернете. Ссылки вроде этот или этот может быть вам полезно. Однако вам нужно будет тщательно сопоставить старый файл библиотеки SQLite с вашей платформой PHP (x64
или x86
), построить двигатель (VC6
, VC9
или VC11
), версия (5.x
) и введите (TS
для потокобезопасный или NTS
для не потокобезопасный). Это может быть сложной задачей.
Покинуть php_sqlite.dll
(SQLiteDatabase
) позади и отправляем в новый php_sqlite3.dll
(SQLite3
объект). Сначала вам нужно использовать такой инструмент, как SQLite Studio преобразовать файл базы данных из 2.1 в 3.0 (размер можно уменьшить даже наполовину), а затем внимательно сравнить SQLite и SQLite3 Справочные страницы PHP для изменения необходимых объектов и вызова функций.
Если вариант два, обратите внимание, что это не должно быть тяжелой работой, поскольку изменения не такие уж большие. Например, то, что я узнал до сих пор:
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))
{
...
}
Другие изменения требуют аналогичного объема работы, поэтому это не должно быть пожизненным процессом.
Я, конечно, настоятельно советую всем идти вперед и выбирать второй вариант. Прогресс в большинстве случаев является лучшим из двух доступных вариантов.
В Google довольно много сообщений об одной и той же проблеме, но окончательного решения нет.
Дважды проверьте, что ваше расширение SQLlite включено в PHP, и вы должны иметь возможность использовать семейство функций sqlite_ * (например, sqlite_open) вместо подхода ООП, что я знаю не идеально.
Также просто убедитесь, что ваш модуль PECL для sqlite> = 1.0.0.
У меня такая же проблема.
Если вы обновили свою версию php, некоторые из старых файлов конфигурации могут ссылаться на несуществующий файл.
Посмотрите на ".ini" файлы в "conf.d" каталог. В моем случае путь моего "conf.d" каталог "/etc/php5/conf.d" в системе Debian.
Говоря конкретно о "SQLiteDatabase" класс, моя проблема была в "sqlite.ini" файл, указывающий на "sqlite.so" которого не существует.
После удаления "sqlite.ini" убедитесь, что существует ini-файл, указывающий на допустимое расширение sqlite (в данном случае "sqlite3.ini" указывает на "sqlite3.so") и перезапустите apache, у меня все сработало.
Надеюсь, поможет.
У меня была такая же проблема, и я забыл раскомментировать extension = php_pdo_sqlite.dll
И
extension = php_sqlite.dll
У меня была аналогичная проблема, и при попытке установить sqlite с помощью «yum install sqlite.i386» он сказал, что он установлен и обновлен, однако по какой-то причине в моем php.ini ничего не было об этом, и он не работал хотя phpinfo сообщал "с sqlite = shared" и т. д.
Добавление "extension = sqlite.so" где-то в php.ini заставило его работать, я поместил свой в раздел PDO внизу, но я сомневаюсь, что это имеет значение, где вы его действительно поместите.
О, и обязательно перезапустите apache, прежде чем проверять его, или просто перезагрузите коробку! :)
Это старое, но хорошее, что меня СНОВА ужалили !!! Оказывается, нужно установить расширения sqlite и sqlite3 php, последнее может быть у вас, но вы просматриваете страницу руководства для расширения sqlite.
Моим решением было запустить:
print_r(get_declared_classes());
И это отображает:
.......
[130] => mysqli_stmt
[131] => SQLite3
[132] => SQLite3Stmt
[133] => SQLite3Result
[134] => ImagickException
.......
Поэтому моя установка не определяет класс SQLiteDatabase только SQLite3. Теперь обратитесь к разделу руководства по php для sqlite3.
С версией PHP 5.6.2 в системе Arch Linux (текущий: ноябрь 2014 г.)
Обратите внимание:
Задайте в /etc/php/php.ini путь, по которому ваше расширение sqlite3.so находится в разделе:
[sqlite3]
sqlite3.extension_dir = / путь / к / вашим / модулям
Мои установлены в '/ usr / lib / php / modules' и могут быть перечислены с помощью pacman:
$ sudo pacman -Ql php-sqlite
В нем будут перечислены установленные расширения sqlite3.so и другие файлы.
Вы можете проверить, нашел ли PHP расширение, запросив:
$ php --ri sqlite3
В данный момент я использую Adminer, как описано на wiki.archlinux.org, и он создал базу данных после того, как я установил этот путь в php.ini.
Спасибо за информацию, предоставленную выше, и успехов.
Проверьте свой php.ini (например, в Windows):
extension=php_pdo.dll
extension=php_pdo_sqlite.dll
extension=php_sqlite.dll
Проверьте свой php.ini. 1) Введите вручную путь к файлу расширений. Uncoment: extension_dir = "C: \ php \ ext" 2) Не забудьте удалить расширения в главе «Динамические расширения»: extension = php_mysqli.dll extension = php_pdo_sqlite.dll extension = php_sqlite3.dll