Я запускаю MicroApache ( http://microapache.amadis.sytes.net ) в Windows XP и хотел бы использовать базы данных SQLite 3.
Версия PHP – 5.2.9-2.
Моя версия MicroApache поддерживает SQLite 2 через 2 строки в php.ini:
расширение = php_pdo.dll
расширение = php_sqlite.dll
Я проверяю, работает ли расширение тремя способами:
1. phpinfo ()
2. extension_loaded () и get_loaded_extensions ()
3. используя пример кода, который var_dump () s является константой SQLITE3_NUM (должен быть целым числом 2) и пытается создать базу данных (ошибка: class 'SQLite3' не существует)
Вещи, которые я пробовал (если я могу их запомнить):
1. скопировал php_sqlite3.dll из полной установки PHP и добавил «extension = php_sqlite3.dll» в php.ini
-> ошибка "Точка входа процедуры gc_remove_zval_from_buffer не найдена в php5ts.dll"
2. Сжат DLL с UPX (как, например, другие DLL-файлы MicroApache)
-> не отображается ошибка при запуске или в файле журнала, но не работает
3. Пробовал различные вещи с помощью php.ini
– создал раздел "[sqlite3]"
– префикс «sqlite3». на "extension_dir =." и "extension = php_sqlite3.dll"
– …
4. попытался использовать PDO, он говорит, что «не смог найти драйвер»,
Кто может помочь мне заставить SQLite 3 работать?
Проблема подключения к SQLite 3 DB и аналогичных проблем рассматривается и обсуждается на форуме, озаглавленном «Подключение к базе SQLite3 из PHP 5.25». Это может ответить на некоторые ваши запросы.
Последняя сборка SQLite скомпилирована в PHP5 и включена через PDO.
Он показывает в PHPINFO.PHP как
2.0-dev "$ Id: sqlite.c, v 1.166.2.13.2.12 2008/12/31 11:17:44 sebastian Exp $"
Звучит скорее как проблема с тестовым кодом. Вы перекрестно проверили, запустив систему SQLite со стандартным Apache и той же версией PHP? Каковы результаты phpinfo()
и т. Д.?
Недавние дистрибутивы MicroApache поставляются с гостевой книгой PHP / SQLite в качестве демонстрации / теста. Не работает ли это?
Подумайте об этом, возможно, вы не заметили, что есть дистрибутив SQLite. Почему бы не вернуться на сайт и проверить другие версии (просто разархивируйте и запустите).
Как всегда, я указываю, что MicroApache не предназначен для использования на общедоступном веб-сервере, не обращая особого внимания на конфигурацию безопасности. Он был разработан только как способ совместного использования информации локально через дискету или USB-накопитель. Однако достаточно легко ожесточиться.
Я уверен, что вы знаете, что разработчик SQLite переименовал ряд функций с появлением SQLite3, включая открытую функцию – (см. Здесь: Введение в интерфейс SQLite C / C ++ ) – Я не уверен, как это были обработаны разработчиками PHP, включая эту кодовую базу в PHP. Предложение со страницы, приведенной выше, заключается в том, что вы можете открыть PHp3 DB «как есть» с правильным PHP-кодом.
Смешивание DLL с разных дистрибутивов PHP не рекомендуется. Я не рекомендую другое использование дистрибутива MicroApache, отличного от «как есть». Добавление или смешивание DLL-файлов из разных версий PHP и т. Д. С MicroApache может привести к серьезным ошибкам или проблемам безопасности.
До сих пор мало интереса к SQLite с MicroApache или нет, поэтому я действительно не слишком глубоко врывался в него, кроме как проверять функциональность.
Я не слишком полагаюсь на то, что сообщает phpinfo()
.
Возможно, вы можете обновить свою информацию, чтобы подтвердить, является ли точная версия.
Обновить
У меня было время для изучения немного больше, и обсуждение php5-sqlite3 в списке рассылки Mac OS Forge отвечает на вашу проблему.
Реализация PHP является частичной и плохо документирована. Некоторые вызовы процедурных функций SQLite3 распространяются только на иерархию объектов. Процедурный API предлагает только возможность открытия SQLite 2 DB, поэтому вы застряли в использовании объектов по внешнему виду.
Существует также расширение PECL, php-sqlite3, которое было разработано в течение 2008 года, в настоящее время в версии 0.6. Это то, что устанавливает порт php5-sqlite3. Но он не обеспечивает функцию sqlite3_open, которую вы ищете. Скорее, он дает объектно-ориентированный интерфейс, основанный на трех классах: SQLite3, SQLite3Stmt и SQLite3Result. Это описано здесь, а не полностью, в частности, установка
инструкции полностью отсутствуют:
MicroApache 2.0.63 + PHP 5.2.9 + SQLite
MicroApache 1.3.41 + PHP 4.4.9 + SQLite
MicroApache 1.3.41 + PHP 4.4.9 + SQLite
MicroApache 1.3.41 + PHP 4.4.9 + SQLite + GD2
Надеюсь, вы сможете играть с этими дистрибутивами и решать свои проблемы.
В дистрибутив включен дистрибутив SQLite3.DLL, который можно получить непосредственно из VB5 / 6 или любого совместимого языка, который может вызывать DLL.
Это был отдельный проект, который я недавно изучил. Это было сделано в MSVC путем редактирования исходного источника. Эта DLL несовместима с PHP / PDO, но может использоваться через интерфейс CGI. В качестве альтернативы исходная библиотека SQLite 3 DLL может быть получена и использована через Delphi и т. Д.
Имейте в виду, что у меня есть дистрибутив с поддержкой SQLite. Однако он поддерживает только версию 2, а не 3.
Моя версия MicroApache поддерживает SQLite 2 […]
Я хотел бы использовать SQLite 3, потому что это быстрее, я мог взаимодействовать с базами данных, которые я создал для проекта в Delphi, и я мог получить доступ к вновь созданным базам данных с помощью расширения SQLite Manager Firefox.
Я еще немного потрудился с этой проблемой, но все равно не мог создать / получить доступ к базе данных SQLite 3.
Интересно, что ссылка, которую вы указали в части 1, упоминает класс «SQLiteDatabase», который не найден в документации PHP и не является частью расширения SQLite3 (которое ориентировано на объекты – как упоминалось в вашем последнем посте, Mad Max).
«SQLiteDatabase» создает базу данных, но когда вы ее открываете, вы можете видеть, что она находится в версии 2.1.
Спасибо за помощь.
РЕДАКТИРОВАТЬ:
PDO работает только тогда, когда я использую префикс DSN «sqlite2», что не удивительно, поскольку phpinfo () перечисляет только драйвер «sqlite2» в разделе «PDO».