SQLiteでデータがINSERTできないエラーの原因と対応方法
2024/01/20
SQLiteでINSERT文を発行するも「Warning: SQLite3::query(): Unable to execute statement: attempt to write a readonly database in」みたいなエラーが発生していた。以下に原因と対応方法をメモ。
原因
SQLiteのファイルが読み込み専用になっており、書き込み(INSERT)ができないというのが原因。パーミッションとユーザー、グループあたりを見直す必要がある。
対応方法
該当のSQLiteファイルのパーミッションを777にしても改善されず。フォルダごと777にするのは怖いし、どうしようかと思ってSSHから入って確認してみるとSQLiteファイルのユーザがrootになっていた。
取り急ぎ以下コマンドでという形でsqliteファイルのユーザとグループをapacheに変更する事で直った。
chown apache:apache /hoge/fuga/test.sqlite
その他
ちなみに本件はCronで実行するプログラムで1回目の実行時は正常に動作していた。
Cronをroot権限で実行させていたためSQLiteファイルがrootユーザ権限で作られ、権限が無いapacheユーザでは書き込めないようになっていたと思われる。
ユーザとかグループとかイマイチ理解できていないので、この辺ちゃんと勉強しておかないと痛い目にあいそうでちょっと怖い。
関連記事
-
PHP5.5からSQLite3を使用する際のよく使う構文
PHPからSQLiteを使う際に必ず使うであろう基本的な構文のメモ。PDOは使っ ...
-
データベース管理ツール「Adminer」でSQLite3を使えるようにする方法
SQLite3で作成したデータベース及びテーブルをAdminerから操作したい。 ...
-
SQLiteを使って感じたメリットとデメリット
SQLiteを用いたツールをいくつか作って感じたメリットとデメリットをメモ。 & ...
-
PHPとSQLiteでi-mobileのデータをグラフ化する方法
i-mobileでクリック保証のアフィリエイトだけど数値が並んでいるだけでグラフ ...
-
sqliteでphpmyadminみたいに使えるSQLiteManagerの導入方法
SQLiteのデータベースファイルの中身を見たくてphpmyadminみたいなソ ...