勉強したことのメモ

Webエンジニア / プログラマが勉強したことのメモ。

SQLiteでデータがINSERTできないエラーの原因と対応方法

   2024/01/20  SQLite データベース

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ユーザでは書き込めないようになっていたと思われる。

ユーザとかグループとかイマイチ理解できていないので、この辺ちゃんと勉強しておかないと痛い目にあいそうでちょっと怖い。

 - SQLite データベース

  関連記事

PHP5.5からSQLite3を使用する際のよく使う構文

PHPからSQLiteを使う際に必ず使うであろう基本的な構文のメモ。PDOは使っ ...

データベース管理ツール「Adminer」でSQLite3を使えるようにする方法

SQLite3で作成したデータベース及びテーブルをAdminerから操作したい。 ...

SQLiteを使って感じたメリットとデメリット  

SQLiteを用いたツールをいくつか作って感じたメリットとデメリットをメモ。 & ...

PHPとSQLiteでi-mobileのデータをグラフ化する方法

i-mobileでクリック保証のアフィリエイトだけど数値が並んでいるだけでグラフ ...

sqliteでphpmyadminみたいに使えるSQLiteManagerの導入方法

SQLiteのデータベースファイルの中身を見たくてphpmyadminみたいなソ ...