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.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のあたりです。いま久しぶりに復習しているのですがハマっています。
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。