こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

phpでMySQLのデータベースにアクセスする際、

phpでMySQLのデータベースにアクセスする際、
条件にあったデータを表示するために
$sql = "SELECT id, name, address, age FROM list WHERE age < 60";
のようにして、データベースにアクセスします。
つぎに、同じページ内で、アクセスしたテーブルにデータを追加したいのですが、WHERE age < 60という条件を設定したままでinsertするとエラーがでて上手くいきません。

最初の条件をORDER BY idなどのようにすれば、上手くinsert出来るのですが、なるべくデータベースの方で条件(age < 60)を比較して欲しいので、WHERE句は外せません。

WHERE句を使った状態でinsertする方法を教えてください。よろしくお願いします。環境はレンタルサーバです。

投稿日時 - 2010-08-19 02:57:21

QNo.6119581

すぐに回答ほしいです

質問者が選んだベストアンサー

まずdieをつかうなら

mysql_query($sql, $conn) or die(mysql_error());
などして、エラーの状況を確認することです。

単純に最初に発行したsqlがなんらかの文法エラーでも起こしているのではないかと
暗に推測されますが・・・

投稿日時 - 2010-08-19 22:02:51

補足

どうやらPOSTしたデータが、新しくデータを追加して更新した時に、ページ内のPOSTがうまくいってなかったようです。ありがとうございました。

投稿日時 - 2010-08-20 06:12:40

お礼

ありがとうございました

投稿日時 - 2010-08-20 06:13:56

ANo.4

このQ&Aは役に立ちましたか?

5人が「このQ&Aが役に立った」と投票しています

回答(5)

ANo.5

横からですが一言。
質問者は「ありがとうございました」と書いて解決したかに見えますが、
SQL文法の基本をすっとばしたままになっているような気がします。
他の回答者も指摘している通り、
WHERE句はINSERT文では使用できません。
WHERE句が使用できるのは、SELECT文、UPDATE文、DELETE文です。
これをしっかりおぼえておいたほうが良いでしょう。
あいまいなままにしておくと一難去ってまた一難を繰り返すだけです。

投稿日時 - 2010-08-21 23:22:06

ANo.3

こんにちは。

意味がさっぱりわかりません・・・。
INSERT句にWHERE付けるの???

投稿日時 - 2010-08-19 17:38:28

補足

$sql = "SELECT id, name, address, age FROM list WHERE age < 60";
$res = mysql_query($sql, $conn) or die("データ抽出エラー");

$data1 = $HTTP_POST_VARS["inpdata1"];
$data2 = $HTTP_POST_VARS["inpdata2"];
$data3 = $HTTP_POST_VARS["inpdata3"];
$sql = "INSERT INTO `list` (`name`, `address`, `age`) VALUES ('$data1','$data2','$data3')";
mysql_query($sql, $conn) or die("データ追加エラー");

でエラーがでるということです。WHERE age < 60をORDER BY idなどにするとエラーはでないのですが、同じページ内で、60歳以下の人を表示したいので、WHERE age < 60を使っています。

投稿日時 - 2010-08-19 20:17:24

ANo.2

SQL的なロジックがおかしいですね
「ageが60以上の人が一人もいない場合インサートしたい」ということなんでしょうか?

INSERT INTO list (id, name, address, age)
SELECT 999, 'the name', 'the address', 20 FROM list WHERE having max(data) < 60

投稿日時 - 2010-08-19 11:06:24

補足

$sql = "SELECT id, name, address, age FROM list WHERE age < 60";
$res = mysql_query($sql, $conn) or die("データ抽出エラー");

$data1 = $HTTP_POST_VARS["inpdata1"];
$data2 = $HTTP_POST_VARS["inpdata2"];
$data3 = $HTTP_POST_VARS["inpdata3"];
$sql = "INSERT INTO `list` (`name`, `address`, `age`) VALUES ('$data1','$data2','$data3')";
mysql_query($sql, $conn) or die("データ追加エラー");

でエラーがでるということです。WHERE age < 60をORDER BY idなどにするとエラーはでないのですが、同じページ内で、60歳以下の人を表示したいので、WHERE age < 60を使っています。

投稿日時 - 2010-08-19 20:18:01

ANo.1

INSERTでWHEREが必要という意味がよくわかりません。
まだ存在しないレコードの特定のカラムの値を条件にするなんてできっこないのではないでしょうか?

画面の入力値等からレコードを追加するならsqlを投げる前に入力値チェックではじいてください。

投稿日時 - 2010-08-19 09:59:56

補足

$sql = "SELECT id, name, address, age FROM list WHERE age < 60";
$res = mysql_query($sql, $conn) or die("データ抽出エラー");

$data1 = $HTTP_POST_VARS["inpdata1"];
$data2 = $HTTP_POST_VARS["inpdata2"];
$data3 = $HTTP_POST_VARS["inpdata3"];
$sql = "INSERT INTO `list` (`name`, `address`, `age`) VALUES ('$data1','$data2','$data3')";
mysql_query($sql, $conn) or die("データ追加エラー");

でエラーがでるということです。WHERE age < 60をORDER BY idなどにするとエラーはでないのですが、同じページ内で、60歳以下の人を表示したいので、WHERE age < 60を使っています。

投稿日時 - 2010-08-19 20:18:55

あなたにオススメの質問