Laravel:连接到sqlite数据库抛出" PDOException:找不到驱动程序"

时间:2014-12-26 15:36:26

标签: php sqlite laravel

我正在将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错误。

感谢您的任何帮助。提前谢谢!

1 个答案:

答案 0 :(得分:2)

你得到的例外:

  

PDOException:找不到驱动程序

每当无法找到数据库的驱动程序时,PHP的PDO就会给出

。 PDO需要一个驱动程序来操作不同的数据库(例如Sqlite,Mysql,...)。 PDO根据DSN查找驱动程序。在您的情况下,DSN是:

sqlite:app/database/production.sqlite

因为驱动程序只在第一个冒号(“:”)之前的部分中查找:

sqlite

字符串sqlite用于查找sql​​ite3驱动程序(请参阅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),这可能有两个原因:

  1. PDO驱动程序需要不同的PDO API版本
  2. 必须在加载任何PDO驱动程序之前加载PDO
  3. (技术上有第三个原因,但应该忽略它:将驱动程序添加到PDO驱动程序的哈希表失败,这是非常内部的,与PDO没有任何关系)

    当加载扩展程序但未找到驱动程序时,我怀疑注册PDO驱动程序时出现问题。您应该检查PHP错误日志中的启动错误。正如您所说,在共享主机上遇到此问题,您需要联系支持,找到PHP错误日志。你正在寻找启动错误。有时,这些错误也会显示在Web服务器的错误日志中,具体取决于使用的是哪个PHP SAPI接口。

    请同时提供phpinfo()的信息,以便提供更多指导。根据您提供的信息,您可以放心,PDO的sqlite驱动程序尚未加载。这是一个配置问题。