我正在尝试使用PDO连接SQLite数据库,但收到以下错误:
未捕获异常‘PDOException’,消息为‘找不到驱动程序’
在我的代码中:
$db = new PDO('sqlite:remedios.sqlite');
此外,命令PDO::getAvailableDrivers()
仅列出MySQL。我用的是Ubuntu 14.04
但问题是我已经安装了pdo_sqlite(与apt-get sqlite3 php5-sqlite
一起安装)。我还查看了一下:
- my phpinfo()显示sqlite3(phpinfo在这里:PHPInfo)
- 我的PHP配置文件中有
extension=pdo_sqlite.so
,位于/etc/php5/apache2/conf.d/20-pdo_sqlite.ini(phpinfo将此文件列在“已解析的其他.ini文件”中) - 我在
/usr/lib/php5/20121212
文件夹中有pdo_sqlite.so - 已尝试重新安装sqlite3、php5、php5-sqlite
编辑
配置文件如下:
20-pdo_sqlite.ini
; configuration for php SQLite module
; priority=20
extension=pdo_sqlite.so
20-sqlite3.ini
; configuration for php SQLite module
; priority=20
extension=sqlite3.so
编辑2
在Apacheerror.log上找到此错误
PHP Warning: PHP Startup: Unable to load dynamic library '/usr/lib/php5/20121212/pdo_sqlite.so' - /usr/lib/php5/20121212/pdo_sqlite.so: undefined symbol: sqlite3_column_table_name in Unknown on line 0
[Fri Nov 13 00:03:42.704671 2015] [mpm_prefork:notice] [pid 1938] AH00163: Apache/2.4.7 (Ubuntu) PHP/5.5.9-1ubuntu4.14 OpenSSL/1.0.1f configured -- resuming normal operations
[Fri Nov 13 00:03:42.704702 2015] [core:notice] [pid 1938] AH00094: Command line: '/usr/sbin/apache2'
3条答案
按热度按时间lxkprmvk1#
您缺少SQLite客户端库,我认为该包是Ubuntu上的libsqlite3-0:
apt-get install libsqlite3-0
在那之后重启Apache。
更新-在
ldconfig -p | grep sqlite
的帮助下,我们在聊天中弄清楚了这一点。它在/usr/local/lib中发现了一个陈旧的libsqlite3安装,该安装与Apache正在使用的安装冲突。删除冲突的安装并重新安装Sqlite3包解决了问题。mum43rcc2#
我也遇到过类似的问题,我认为在这个问题上给出另一个详细的答案很重要。问题的根源在于,我从源码(Ubuntu 16.04的repo已经过时)中构建了自己的最新版本的SQLite,没有定义
SQLITE_ENABLE_COLUMN_METADATA
。在我重新启动机器之前,它起作用了。可能是以前的版本在运行或类似的东西,因为重启后我遇到了麻烦。http://source.online.free.fr/Linux_HowToCompileSQLite.html
SQLitePass库使用特定的SQLite函数来检索有关SQL语句的架构信息。
这些功能包括:
遗憾的是,它们并不总是在SQLite网页上的预编译库或专门用于您的Linux发行版的SQLite包中提供。
为了在我们的sqlite3.so库中获得这些函数,我们需要使用[SQLITE_ENABLE_COLUMN_METADATA]编译器指令编译SQLite源代码。
这就是为什么
less +G /var/log/php_errors.log
输出有这样的行Php警告:php启动:无法加载动态库‘/usr/lib/php/20151012/pdo_sqlite.so’-/usr/lib/php/20151012/pdo_sqlite.so:未定义符号:第0行未知中的SQLITE3_COLUMN_TABLE_NAME
尽管
pdo_sqlite
一直存在于phpinfo();
输出中。为了解决这个问题,我确实按照上面的链接执行了编译说明:在源代码中打开
sqlite3.c
,在代码行之后打开添加
那就跑吧
现在,Sqlite又开始发挥作用了。
vc9ivgsu3#
键入以下内容: