-3

我要离开这里的 Zend 教程。它已经过时了几年,并且给定的 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 服务器,该文件位于phpstuff上面列出的目录中。/sqlitedbtestdb.db权限都设置为 777 。

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

4

1 回答 1

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 的异常应该为您指明正确的方向。

于 2013-08-14T06:28:03.897 回答