我正在将Laravel项目部署到共享主机并添加了一个php.ini:
extension=pdo.so
extension=pdo_sqlite.so
extension=sqlite.so
在phpinfo中,我还可以看到加载了sqlite扩展。使用以下代码片段测试连接到数据库也有效:
<?php
try {
$dbh = new PDO("sqlite:app/database/production.sqlite");
echo "Connected to database!";
}
catch(PDOException $e)
{
echo $e->getMessage();
}
但是,当尝试使用Laravel连接到数据库时,应用程序会抛出PDOException错误。
感谢您的任何帮助。提前谢谢!
答案 0 :(得分:2)
你得到的例外:
每当无法找到数据库的驱动程序时,PHP的PDO就会给出PDOException:找不到驱动程序
。 PDO需要一个驱动程序来操作不同的数据库(例如Sqlite,Mysql,...)。 PDO根据DSN查找驱动程序。在您的情况下,DSN是:
sqlite:app/database/production.sqlite
因为驱动程序只在第一个冒号(“:
”)之前的部分中查找:
sqlite
字符串sqlite
用于查找sqlite3驱动程序(请参阅PDO_SQLITE DSN
in the PHP manual)。
在所有PDO中只有一个地方抛出此异常(php 5.4 lxr)并且只有在DSN中冒号之前的文本没有找到驱动程序时才会抛出它。这也是您可以从错误消息中获得的。
由于您已完成the best answer to "How to determine if PDO is enabled in PHP"中列出的检查,因此您已确定已加载PDO sqlite 扩展程序。
为了清楚说明:包含sqlite的PDO驱动程序的PHP扩展名为 pdo_sqlite
,您已检查该文件已加载。
我唯一的解释是您加载了扩展,但PHP无法加载驱动程序。根据PHP来源(php 5.4 lxr),这可能有两个原因:
(技术上有第三个原因,但应该忽略它:将驱动程序添加到PDO驱动程序的哈希表失败,这是非常内部的,与PDO没有任何关系)
当加载扩展程序但未找到驱动程序时,我怀疑注册PDO驱动程序时出现问题。您应该检查PHP错误日志中的启动错误。正如您所说,在共享主机上遇到此问题,您需要联系支持,找到PHP错误日志。你正在寻找启动错误。有时,这些错误也会显示在Web服务器的错误日志中,具体取决于使用的是哪个PHP SAPI接口。
请同时提供phpinfo()
的信息,以便提供更多指导。根据您提供的信息,您可以放心,PDO的sqlite驱动程序尚未加载。这是一个配置问题。