勉強したことのメモ

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 データベース

  関連記事

PHPとSQLiteで簡易BBSの作成

PHPとSQLiteの練習で簡易掲示板を作ったのでメモ。   目次1 ...

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

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

SQLiteでNULL値の検索

SQLiteにてNULL値のもののみを検索したかったけど分からなかったので調べた ...

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

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

SQLite3でデータをランダムに抽出したい

SQlite3でデータをランダムで抽出したいケースがあった。MySQLと同様RA ...