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

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

新規登録して質問してみよう
ただいま回答率
85.50%
さくらのクラウド

さくらのクラウドは、さくらインターネット株式会社が提供するIaaS型のクラウドサービス。仮想化技術による柔軟性のあるカスタマイズを始め、様々な高機能を備えています。

INSERT

INSERTとは、行を追加する、コンピュータのデータベース言語SQLにおけるデータ操作言語(DML)ステートメントの1つである

SQLite

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

PHP

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

Q&A

解決済

2回答

1799閲覧

さくらインターネットでPHPを使ってSQLiteにINSERTできません…

anomer

総合スコア55

さくらのクラウド

さくらのクラウドは、さくらインターネット株式会社が提供するIaaS型のクラウドサービス。仮想化技術による柔軟性のあるカスタマイズを始め、様々な高機能を備えています。

INSERT

INSERTとは、行を追加する、コンピュータのデータベース言語SQLにおけるデータ操作言語(DML)ステートメントの1つである

SQLite

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

PHP

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

0グッド

1クリップ

投稿2017/10/24 07:17

編集2017/10/24 07:53

###前提・実現したいこと
さくらインターネットのサーバーでPHPとSQLiteを使って、<textarea>に入力された値を
データベースに格納(INSERT)するだけのプログラムを書いていますが、
select * from で検索しても値が格納されていないのです。

###該当のソースコード(HTMLからPOSTされるphpのファイル)

<?php $comment1 = $_POST['comment1']; $comment2 = $_POST['comment2']; $comment3 = $_POST['comment3']; $comment4 = $_POST['comment4']; $now = date('Y/m/d H:i:s'); try { $db = new SQLite3('test.sqlite3'); $db->query("INSERT INTO testtable (com1,com2,com3,com4,TimeStamp) VALUES ($comment1,$comment2,$comment3,$comment4,$now);"); } catch (Exception $e) { print 'DBへの接続でエラーが発生しました。<br>'; print $e->getTraceAsString(); } ?>

###試したこと
print $_POST['comment1'];等記述し、実行したら前の画面からPOSTされた値がしっかり表示されました。
SQL実行文をcmdで実行したところ、データベースに値が格納されました。
実行するとtest.sqlite3の更新時間は更新されておらず、データベースにアクセスはされていないようです。
エラー等はでていません。

###補足情報(言語/FW/ツール等のバージョンなど)
※PHPもSQLiteもさくらのサーバーも使ったこと無い[Java][.NET]プログラマーです。

SQLite 3
PHP 5

ご教授何卒よろしくお願いいたします。

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

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

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

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

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

guest

回答2

0

ベストアンサー

エラーが出てないなら、DBファイルのパーミッションの設定などをご確認ください。
DBファイルは読み書きを行うので、パーミッション0666が基本です。

イメージ説明

また、フォルダーの権限は0766以上でしょうか?
そちらもご確認ください。


ちなみに私は、さくらのレンタルサーバライトプランでSQLiteを使用しておりますが、問題なく書き込めます。(SQLiteクラスは使っていませんが)

PDOを使うと安全性もあり、私の環境では動作しているので、参考までに。

PHP

1# データベースへ接続するモデルのインスタンス化 2$pdo = new PDO('sqlite:データベースのファイル名', '', ''); 3 4# 常にFETCH_ASSOC(SQLiteはfetch結果の配列に、通し番号を含めてくるのでそれを排除。この処理はしなくても良い) 5$pdo->setAttribute(PDO::ATTR_DEFAULT_FETCH_MODE, PDO::FETCH_ASSOC); 6 7# SQL文の準備(「:文字列」はプレースホルダーと呼ばれるもの。ここに値をあとで代入する。SQLインジェクション対策とかになる) 8$sql = 'INSERT INTO testtable 9 (com1, com2, com3, com4, TimeStamp) 10VALUES 11 (:comment1, :comment2, :comment3, :comment4, :TimeStamp) 12'; 13 14# プレースホルダーに渡す値を指定 15$data = array( 16 'comment1' => $comment1 17 , 'comment2' => $comment2 18 , 'comment3' => $comment3 19 , 'comment4' => $comment4 20 , 'TimeStamp' => $now 21); 22 23# プリペアステートメント(SQL文の設定的なやつ。文字列から) 24$stmt = $pdo->prepare($sql); 25 26# プレースホルダーに値を渡し、SQLを実行 27$stmt->execute($data); 28

投稿2017/10/24 12:08

編集2017/10/24 12:27
nnahito

総合スコア2004

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

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

0

値が格納されなかったということですよね?
でしたらひとまず単純に以下のプログラムで実行してみてください。

$comment1 = $_POST['comment1']; $comment2 = $_POST['comment2']; $comment3 = $_POST['comment3']; $comment4 = $_POST['comment4']; $now = date('Y/m/d H:i:s'); $db = new SQLite3('test.sqlite3'); $db->query("INSERT INTO testtable (com1,com2,com3,com4,TimeStamp) VALUES ($comment1,$comment2,$comment3,$comment4,$now)"); $db->close();

$db->queryの部分に余計な「;」が入ってたので消してます。

投稿2017/10/24 09:27

退会済みユーザー

退会済みユーザー

総合スコア0

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

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

anomer

2017/10/27 14:18

修正しましたが、特に変わりませんでした。申し訳ありません…
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問