使用PDO无法让PHP使用sqlite查询任何内容

时间:2013-08-14 04:38:15

标签: php sqlite pdo

我要退出Zend教程here。它已经过时了几年,并且给定的PHP代码不起作用。我已经设置了sqlite数据库,我在命令行中进行了设置。从谷歌搜索,我决定尝试PDO并最终得到以下内容:

<?php
$filepath = $_SERVER['DOCUMENT_ROOT'] . "/phpstuff/sqlitedb/testdb.db";
$db = new PDO('sqlite:' . $filepath) or die('Could not open database');
$query = "SELECT * FROM books";
$result = $db->query($query);

echo "<table cellpadding=10 border=1>";
foreach($result as $row) {
    echo "<tr>";
    echo "<td>" . $row[0] . "</td>";
    echo "<td>" . $row[1] . "</td>";
    echo "<td>" . $row[2] . "</td>";
    echo "</tr>";
}
echo "</table>";

$db = NULL;
?>

我在每个页面上都包含的页眉和页脚仍然出现,但是没有表格出现,所以我认为这是查询不起作用。我不知道为什么。我试图用作我的循环条件while ($row = $result->fetchArray()),但也失败了。

我确实运行phpinfo()以查看是否安装了PDO驱动程序,并extension_loaded查看是否安装了sqlite3。两个都签出了。我还在表打印输出之前和之后运行了简单的echo语句,两者都有效。只是表根本没有生成。这可能与我的文件路径有关吗?权限? PHP / sqlite版本?我的服务器正在运行Ubuntu 12.04 Server,该文件位于上面列出的phpstuff目录中。 /sqlitedbtestdb.db权限都设置为777。

更新:将文件路径更改为/sqlite/testdb.db会产生错误SQLSTATE[HY000] [14] unable to open database file。目前正在检查这是否是权限问题以及如何更改

1 个答案:

答案 0 :(得分:3)

这可能不是解决方案,但评论部分太小了。无论如何,它应该可以帮助您解决问题的根源。

首先,启用错误报告

<?php
ini_set('display_errors', 'On');
error_reporting(E_ALL);

您可以在生产后删除这些行。

尝试使用更好的文件路径(我总是发现DOCUMENT_ROOT不可靠,特别是如果您想通过非Web方法访问脚本)。另外,将PDO设置为抛出异常

$db = new PDO('sqlite:' . __DIR__ . '/sqlitedb/testdb.db');
$db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

有可能,您的查询失败,因此$resultfalse。从PDO启用正确的错误处理异常应该指向正确的方向。