我正试图使用PDO连接SQLite数据库,但我收到了以下错误:
未捕获异常"PDOException",消息为"找不到驱动程序"
在我的代码中:
$db = new PDO('sqlite:remedios.sqlite');
此外,命令PDO::getAvailableDrivers()
仅列出mysql。我使用的是Ubuntu 14.04
但问题是我已经安装了pdo_sqlite(与apt-get sqlite3 php5-sqlite
一起安装)。我也在上查看过
- 我的phpinfo()显示sqlite3(phpinfo在这里:phpinfo)
- 我在/etc/php5/apache2/conf.d/20-pdo_sqlite.ini中的PHP配置文件中有
extension=pdo_sqlite.so
(phpinfo在"Additional.ini files parsed"中列出了该文件) - 我在文件夹
/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'
您缺少SQLite客户端库,我认为该包是Ubuntu:上的libsqlite3-0
apt-get install libsqlite3-0
之后重新启动Apache。
更新-我们在ldconfig -p | grep sqlite
的帮助下在聊天中发现了这一点。它在/usr/local/lib中发现了一个过时的libsqlite3安装,该安装与Apache正在使用的安装冲突。删除冲突的安装并重新安装sqlite3包解决了问题。
我也遇到过类似的问题,我认为给出另一个详细的答案很重要。问题的根源是,我从没有SQLITE_ENABLE_COLUMN_METADATA
定义的源代码(Ubuntu 16.04的repo已经过时)构建了自己的最新版本sqlite。在我重新启动机器之前它工作了。可能是以前的版本在运行或类似的东西,因为重新启动后我遇到了麻烦。
http://source.online.free.fr/Linux_HowToCompileSQLite.html
SQLitePass库使用特定的SQLite函数来检索SQL语句的架构信息。
这些功能是:
sqlite3_column_database_name sqlite3_column_database_name16 sqlite3_column_table_name sqlite3_column_table_name16 sqlite3_column_origin_name sqlite3_column_origin_name16 sqlite3_table_column_metadata
不幸的是,它们并不总是在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.sho:未定义的符号:sqlite3_column_table_name在第0行的未知中
尽管CCD_ 9一直存在于CCD_。
为了解决这个问题,我确实通过上面的链接遵循了编译说明:在源代码和行之后打开sqlite3.c
#define SQLITE_CORE 1
#define SQLITE_AMALGAMATION 1
#ifndef SQLITE_PRIVATE
# define SQLITE_PRIVATE static
#endif
添加
#define SQLITE_ENABLE_COLUMN_METADATA
然后运行
$ ./configure
$ make
$ make check
make: Nothing to be done for 'check'.
$ sudo make install
$ sudo service apache2 restart
现在sqlite又开始工作了。
键入this:
sudo apt-get install php5-sqlite