【PHP、SQlite】DBを更新した時にエラーが出たときの対応

php_sqliteソフト

Widnowsでは問題ないPHPとSQLliteのアプリが動かない

MacでPHPとSQliteを使ってDBを操作(参照、変更、削除)するだけのアプリを作っていたときの話です。

テーブルやデータがすでに有るDBファイルにアクセスしてデータを取り出すことはできていることは確認できていました。

でも、更新や追加、削除をしようとしたとき、

下のようなエラーが表示されてDBは更新されませんでした。

SQLSTATE[HY000]: General error: 8 attempt to write a readonly database


SQLiteのDBファイルが読取専用だから書き込みができない(読み取り専用)とエラーが出ているのか。

そう考え、SQLiteのDBファイルの権限を変更して所有者以外も読み書きできるように変更した。

しかし、再実行しても上記エラーは消えなかった。

色々と調べると以下の様なことがわかった。

・ トランザクション中にジャーナルファイル(データベース名-journal)が生成される
・ コミット時にジャーナルファイルが削除される


ファイルの読書権限もさることながら、ディレクトリの権限も考えないと行けないようだ。

ファイルと同様DBファイルが有るディレクトリに権限を付与した。

そして再実行するとエラーも出ず無事に実行できた。

DBをファイルの操作だけでなくファイルを生成するのであればディレクトリに書き込み権限が必要でしたね。

まとめ

PHPとSQliteを使ってデータベース操作するときは、

ファイルの書き込み権限だけでなくディレクトリにも書き込み権限を付与する必要がある。

参考になったサイト

sqlite — 挿入中のSQLiteエラー「読み取り専用データベースへの書き込み試行」
Webサイトに使用しているSQLiteデータベースがあります。問題は、INSERT INTOを実行しようとすると、PDOExceptionを取得することですSQLSTATE: General error: 8 attempt to write a readonly database サーバ...
PHP: SQLite (PDO) - Manual
SQLiteはディレクトリにも書き込み権限が無いとダメ
PHPのプログラムで、fputs でのファイル更新は出来るのに、SQLiteでデータベース更新が unable to open database file エラーで出来ませんでした。 これは下記ページで解決しました。 SQLiteは、データ

コメント

タイトルとURLをコピーしました