SQLite の壮大な主張にも惹かれます。しかし、他の多くのソフトウェアと同様に、親切な開発者による古いドキュメントやブログをフォローするのは簡単ではありません。これ以上の不満はありませんが、環境に関する質問と詳細は次のとおりです。
SQLite バージョン 2.8.17 がインストールされた PHP 5.2.17 を実行する Web ホスト プロバイダーがあります。phpinfo() の出力は、(pdo_sqlite セクションの下で) SQLite のバージョンが 3.3.7 であることを示しています。自宅では、PHP 5.4.10 を実行する Apache サーバーを使用しています。phpinfo() は両方のサイトで正常に動作します。ホーム ラップトップでは、(sqlite3 の下で) バージョンは 3.7.7.1 です。
問題については、いくつかのテーブルを含むデータベースを作成し、それ (データ ファイル) をホーム コンピューターとリモート ホストの間で ftp でやり取りしたいと考えています。PHPスクリプトを作成しようとしています
- 脚が存在しない場合はテーブルを作成...
- 既存の行を削除
- いくつかの新しい行を挿入します
- テーブルを読み取り、Html テーブルとして出力します
どういうわけか、リモートサーバーで正常に動作するこのファイル dbc1.php を作成しました。同様のファイル dbc2.php は、「存在しない場合」句で失敗し、次に他のステートメントで失敗し、dbc1.php によって作成されたデータベース ファイルを読み取ることさえできません。エラーメッセージは次のとおりです。
file is encrypted or is not a database
ファイルを移動すると、dbc2.php はファイルを作成しますが、挿入された行を取得できません。ローカルホストのバージョンはそれを訴えます
「C:\Web\php\dbcheck.php の 14 行目の未定義関数 sqlite_libversion() の呼び出し」
私のphp.iniファイルでは、「php_pdo_sqlite.dll」と「php_sqlite3.dll」の両方の拡張子をコメント解除し、両方のdllファイルが「ext」フォルダーに存在することを確認しました。他に何をする必要がありますか? 質問:
- dbc2.php よりも dbc1.php のスタイルが優先されますか? なぜですか、そうでないのですか?
- 主張されているように、SQLite データベース ファイルは本当に移植可能ですか?
- PHP5-SQLite3 チュートリアルへのポインターを教えてください。
- phpinfo() と sqlite_libversion() から異なるバージョン番号を取得するのはなぜですか?
返信ありがとうございます。以下に 3 つの PHP ファイルを示しますが、1 つのファイルを使用して操作を実行したいと考えています。
<html>
PHP で SQLite をテストする
'; echo "SQLite バージョン: " . sqlite_libversion() . '
';
$db = new PDO('sqlite:dbname.db'); echo "[SQLite] DB opened<br/>";
$db -> exec ($qc0); echo "[SQLite] table created<br/>";
$db -> exec ($qr1); echo "[SQLite] Rows deleted<br/>";
$db -> exec ($qi1); $db -> exec ($qi2);
$db -> exec ($qi3); $db -> exec ($qi4); echo "[SQLite] Rows inserted<br/>";
try {
$rowsOfTable = $db -> query ($qr5);
print "\t<table border='0' cellspacing='4' cellpadding='4'\n" .
"\t\t\tstyle='padding-top:20px;'>\n";
print "\t\t<tr><td>Creation</td><td>Legs</td></tr>\n";
foreach ($rowsOfTable as $row) {
echo "\t\t<tr>\n" .
"\t\t\t<td>" . $row['name'] . "</td>\n" .
"\t\t\t<td align='right'>" . $row['count'] . "</td>\n" .
"\t\t</tr>\n";
}
print "\t</table>\n";
} catch (PDOException $ex) {
die ($ex->getMessage());
}
?>
これは、動作しない同じ Unix サーバー上のファイルです。
<html>
PHP で SQLite をテスト中 \n"; echo "SQLite バージョン: " . sqlite_libversion() . "
\n";
try {
$db = new SQLiteDatabase('./dbname.db', 0644, $error);
echo "SQLite DB opened<br/>\n";
$db -> queryExec ($qc0, $error); echo "[SQLite] table created<br/>\n";
$db -> queryExec ($qr1, $error); echo "[SQLite] Rows deleted<br/>";
$db -> queryExec ($qi1, $error);
$db -> queryExec ($qi2, $error);
$db -> queryExec ($qi3, $error);
$db -> queryExec ($qi4, $error); echo "[SQLite] Rows inserted<br/><br/>";
if ($tableFromDB = sqlite_query ($db, $qr5, SQLITE_BOTH, $error)) {
print "\t<table border='2' cellpadding='4'>\n";
while ($row = $tableFromDB -> fetch()) {
print "\t\t<tr>\n" .
"\t\t\t<td>" . $row['name'] .
"</td><td>" . $row['count'] . "</td>\n\t</tr>\n";
}
print "\t</table>\n";
} else {
echo "Cannot query DB table: $error\n";
}} catch (Exception $ex) {
die ($error);
}
?>
最後に、ラップトップで実行しようとしているコード:
<html>
PHP で SQLite をテストする
phpinfo(); echo "PHP バージョン: " . phpversion() . '
'; echo "SQLite バージョン: " . sqlite_libversion() . '
';
$db = new PDO('sqlite:dbname.db'); echo "[SQLite] DB opened<br/>";
$db -> exec ($qc0); echo "[SQLite] table created<br/>";
$db -> exec ($qr1); echo "[SQLite] Rows deleted<br/>";
$db -> exec ($qi1); $db -> exec ($qi2);
$db -> exec ($qi3); $db -> exec ($qi4); echo "[SQLite] Rows inserted<br/>";
try {
$rowsOfTable = $db -> query ($qr5);
print "\t<table align='center' border='0' cellspacing='4' cellpadding='4'\n" .
"\t\t\tstyle='padding-top:20px;'>\n";
print "\t\t<tr><td>Creation</td><td>Legs</td></tr>\n";
foreach ($rowsOfTable as $row) {
echo "\t\t<tr>\n" .
"\t\t\t<td>" . $row['name'] . "</td>\n" .
"\t\t\t<td align='right'>" . $row['count'] . "</td>\n" .
"\t\t</tr>\n";
}
print "\t</table>\n";
} catch (PDOException $ex) {
die ($ex->getMessage());
} ?>
皆さん、明けましておめでとうございます:)