-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上記のディレクトリ内にあります。/sqlitedbと権限の両方testdb.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);

おそらく、あなたのクエリは失敗して$resultいますfalse。PDO からの例外を処理する適切なエラーを有効にすると、正しい方向に進むはずです。

于 2013-08-14T06:28:03.897 に答える