【发布时间】:2013-08-14 04:38:15
【问题描述】:
我要离开 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 服务器,该文件位于上面列出的 phpstuff 目录中。 /sqlitedb 和 testdb.db 权限均设置为 777。
更新:将文件路径更改为简单的/sqlite/testdb.db 会产生错误SQLSTATE[HY000] [14] unable to open database file。目前正在检查这是否是权限问题以及如何更改它
【问题讨论】:
-
不要将
or die()与 PDO 一起使用(或任何与此相关的东西)。如果无法连接,PDO 构造函数将抛出PDOException。 -
您还应该在开发过程中启用错误报告。把它放在你脚本的顶部
ini_set('display_errors', 'On'); error_reporting(E_ALL); -
@Phil 谢谢。这给出了
Warning: Invalid argument supplied for foreach() in /var/www/phpstuff/phpsqlite.php on line 30。似乎 PHP 由于某种原因无法从数据库中读取数据