質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
CentOS

CentOSは、主にRed Hat Enterprise Linux(RHEL)をベースにした、フリーのソフトウェアオペレーティングシステムです。

SQLite

SQLiteはリレーショナルデータベース管理システムの1つで、サーバーではなくライブラリとして使用されている。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

Q&A

解決済

2回答

4258閲覧

PHPからSQLite3を操作したいのですがSELECTはうまくいってもINSERTなどの更新系が動きません

true

総合スコア440

CentOS

CentOSは、主にRed Hat Enterprise Linux(RHEL)をベースにした、フリーのソフトウェアオペレーティングシステムです。

SQLite

SQLiteはリレーショナルデータベース管理システムの1つで、サーバーではなくライブラリとして使用されている。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

0グッド

0クリップ

投稿2014/12/25 08:51

PHPからSQLiteを動かしたいのですがうまくいきません。SELECTで全件取得表示はうまくいきますがINSERTなどの更新系がだめです。エラーメッセージが出てこないのでどこが悪いのかも分かりません(php.iniでdisplay_errors=Onに設定しています)。ファイル、フォルダの書き込み権限はあります。

ファイルは/var/www/html直下にあります(list.sqlite3, form_input.html, display.php, input.phpほか)。サンプルデータはlist.sqlite3の中に入ったあとに.importで数件入れています。

開発環境はCentOS6.4 Apache2.2.15 PHP5.4.36 SQLite3.6.20です。

テーブルは
CREATE TABLE t_emaillist (id PRIMARY KEY AUTOINCREMENT, name VARCHAR(128), email VARCHAR(128));
となっています。

input.phpを実行してもテーブルに反映されない状況です。display.phpは最初にlist.sqlite3に直接投入したデータのみが表示されます。


form_input.html


<html> <head> <meta http-equiv="Content-Type" content="text/html;charset=utf-8"> <title>SQLiteテスト</title> </head> <body> <p>ブラウザからSQLiteにレコードを追加。</p> <form method="post" action="input.php">

名前:
<input type="text" name="f_name">
<br><br>

メールアドレス:
<input type="text" name="f_email">
<br><br>

<input type="submit" value="送信"> </form> </body> </html>

input.php


<?php $f_name = $_REQUEST["f_name"]; $f_email = $_REQUEST["f_email"]; $dbh = new PDO("sqlite:list.sqlite3",null,null); $sql = "INSERT INTO t_emaillist (name, email) VALUES('$f_name', '$f_email')"; $sth = $dbh->prepare($sql); $sth->execute(); $dbh = null; ?> <html> <head> <meta http-equiv="Content-Type" content="text/html;charset=utf-8"> <title>SQLiteテスト</title> </head> <body> <p>ブラウザからSQLiteにレコードを追加。</p> レコードを追加しました。 </body> </html>

全件取得表示の下記のコードは正常に動いています。


display.php


<?php $dbh = new PDO("sqlite:list.sqlite3",null,null); $sql = "SELECT * FROM t_emaillist"; $sth = $dbh->prepare($sql); $sth->execute(); ?> <html> <head> <meta http-equiv="Content-Type" content="text/html:charset=utf-8"> <title>SQLiteテスト</title> </head> <body> <p>ブラウザでレコードを表示。</p> <table border="1"> <tr> <td>ID番号</td><td>氏名</td><td>メールアドレス</td> </tr> <?php while($row = $sth->fetch()) { echo "<tr>\n"; echo "<td>$row[0]</td>\n"; echo "<td>$row[1]</td>\n"; echo "<td>$row[2]</td>\n"; echo "</tr>\n"; } $dbh = null; ?> </table> </body> </html>

ちなみに「新標準SQlite3」という書籍のChapter5のあたりです。いま久しぶりに復習しているのですがハマっています。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

ありがとうございます。本を読み返したら「Linuxの場合、必ず、データベースファイルを書き込み可能、データベースファイルを設置するディレクトリを書き込み可能・実行可能の属性に変更してください」とあり、自分のものをもう一度確認したら、
lrwxrwxrwx 1 vagrant vagrant 8 12月 23 11:41 2014 html -> /vagrant
になっていました。これから詳しく調べるつもりですがどうもvagrantの設定周りが怪しいと思うのでもうちょっと頑張ってみます。

投稿2014/12/25 09:45

true

総合スコア440

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

ベストアンサー

PDOは初期状態ではコンストラクタが呼ばれた時点のエラーしか出ないようになっています。
エラーハンドリングの対応が必要になります。
http://php.net/manual/ja/pdo.error-handling.php
ここに書かれています。

INSERTはセミコロンが末尾にないとエラーになるかもしれません。

投稿2014/12/25 08:54

TaMaMhyu

総合スコア1356

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

true

2014/12/25 09:46

ありがとうございます。本を読み返したら「Linuxの場合、必ず、データベースファイルを書き込み可能、データベースファイルを設置するディレクトリを書き込み可能・実行可能の属性に変更してください」とあり、自分のものをもう一度確認したら、 lrwxrwxrwx 1 vagrant vagrant 8 12月 23 11:41 2014 html -> /vagrant になっていました。これから詳しく調べるつもりですがどうもvagrantの設定周りが怪しいと思うのでもうちょっと頑張ってみます。
true

2014/12/25 12:28

ありがとうございました。解決しました。仰るとおり、エラーハンドリングを試したら、 SQLSTATE[HY000]: General error: 8 attempt to write a readonly database: が出てきていろいろサイトを参考に結局ディレクトリとそのデータベースファイルを777にした直りました!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問