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

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

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

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

SQL

SQL(Structured Query Language)は、リレーショナルデータベース管理システム (RDBMS)のデータベース言語です。大きく分けて、データ定義言語(DDL)、データ操作言語(DML)、データ制御言語(DCL)の3つで構成されており、プログラム上でSQL文を生成して、RDBMSに命令を出し、RDBに必要なデータを格納できます。また、格納したデータを引き出すことも可能です。

PHP

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

Q&A

1回答

3003閲覧

【sql】 insertが実行されているのにエラーになってしまいます。

ShintaroObi

総合スコア10

INSERT

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

SQL

SQL(Structured Query Language)は、リレーショナルデータベース管理システム (RDBMS)のデータベース言語です。大きく分けて、データ定義言語(DDL)、データ操作言語(DML)、データ制御言語(DCL)の3つで構成されており、プログラム上でSQL文を生成して、RDBMSに命令を出し、RDBに必要なデータを格納できます。また、格納したデータを引き出すことも可能です。

PHP

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

0グッド

1クリップ

投稿2016/10/10 11:53

編集2016/10/11 10:51

現在、mysqlを使ったアプリを作っているのですが、insertをしようとするとSQLエラーが出てしまいます。(言語はphpを使ってます)しかし、データベースを見るとちゃんとインサートは実行されているのです。
また、アップデートのほうはエラーが出ずにちゃんとページ移動してくれます。(「$val["id]!=""」のとき)

エラーメッセージ
ErrorQuery:You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '' at line 1

該当のソースコード
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
$pdo = db();
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$stmt = $pdo->prepare("SELECT * FROM user_table WHERE fb_id = :fb_id AND life_flg = :flg");
$stmt->bindValue(':fb_id', $fb_id);
$stmt->bindValue(':flg', '1');
$res = $stmt->execute();
//SQL実行時にエラーがある場合
if($res==false){
$error = $stmt->errorInfo();
exit("QueryError:".$error[2]);
}else{

$val = $stmt->fetch();
if( $val["id"] != "" ){

loginSessionSet($val);
$id = $val["id"];
$stmt = $pdo->prepare("INSERT INTO login_time(id, date)VALUES(:id, sysdate())");
$stmt->bindValue(':id', $id);
$status = $stmt->execute();
if($status==false){
$error = $stmt->errorInfo();
exit("QueryError:".$error[2]);
}else{

$stmt = $pdo->prepare("UPDATE user_table SET name= :name, lid= :email, age= :age, lat= :lat, lng= :lng, date= sysdate() WHERE id =:id ");
$stmt->bindValue(':id', $id);
$stmt->bindValue(':name',$name);
$stmt->bindValue(':email', $email);
$stmt->bindValue(':lat', $lat);
$stmt->bindValue(':lng', $lng);
$stmt->bindValue(':age', $age);
$status = $stmt->execute();
if($status==false){
$error = $stmt->errorInfo();
exit("QueryError:".$error[2]);
}else{
header("Location: ../serch.php");
};
};

}else{

loginSessionSet($val);
$stmt = $pdo->prepare("INSERT INTO user_table(name, lid, fb_id, kanri_flg, life_flg, open, cropimg, age, sex, target_sex, lat, lng, date, distance_limit)VALUES(:name, :lid, :fb_id,0, 1, 1, :cropimg, :age, :sex, :target_sex, :lat, :lng, sysdate(), 40)");
$stmt->bindValue(':name',$name);
$stmt->bindValue(':lid',$email);
$stmt->bindValue(':fb_id',$fb_id);
$stmt->bindValue(':cropimg','pic/ningen.jpg');
$stmt->bindValue(':age',$age);
$stmt->bindValue(':sex',$sex);
$stmt->bindValue(':target_sex',$target_sex);
$stmt->bindValue(':lat',$lat);
$stmt->bindValue(':lng',$lng);
$status = $stmt->execute();
if($status==false){
$error = $stmt->errorInfo();
exit("QueryError:".$error[2]);
}else{
header("Location: ../serch.php");
};
};

}
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''

長時間悩まされています。どなたか助けてくれる方いらっしゃいますでしょうか?

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

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

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

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

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

popobot

2016/10/10 13:02 編集

違う処理でエラーがでているということはないでしょう? ちなみに$statusの値はfalseですか?
ShintaroObi

2016/10/10 13:42

ありがとうございます。質問の修正をします。
ShintaroObi

2016/10/10 13:58

すみません。$statusの値がわかりません。if($status==false){ $error = $stmt->errorInfo(); exit("QueryError:".$error[2]); }の部分を外しても同じエラー画面になってしまいます。
A.Ichi

2016/10/10 22:48

もしかして、INSERT INTO login_time(上)にもエラーが発生する場合も有るので、下部と同様にif($status==false)を入れたほうが良いかと思います。
ShintaroObi

2016/10/11 02:28

ありがとうございます。入れてみます。
退会済みユーザー

退会済みユーザー

2016/10/11 10:48 編集

コード部分は「```」行で挟んでください、大変読みにくいです。質問の編集画面で、コード箇所を選択した後、ツールバー上の「<code>」をクリックするだけです。
退会済みユーザー

退会済みユーザー

2016/10/11 10:48

「---」じゃなくて「```」ね。等幅フォントで表示してコードが読みやすくなるから嘘だと思っても試してほしい。
ShintaroObi

2016/10/11 10:51

ありがとうございます。
guest

回答1

0

まずはどこでエラーがでているか明確にする必要があると思います。
new PDOして、$pdoを作成した直後に以下の設定を追記してみてください。

php

1$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

そうすると、エラーが発生するとExceptionが発生して、エラーが発生した箇所が表示されます。

投稿2016/10/10 20:11

popobot

総合スコア6586

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

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

ShintaroObi

2016/10/11 02:32

ありがとうございます。やってみます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問