insert文等で失敗するテーブルと成功するテーブルの違いについて

このQ&Aのポイント
  • XAMPPを使用している際に、insert文を実行すると、一部のテーブルで成功し、他のテーブルで失敗する現象が生じます。
  • insert文のクエリで、一部テーブルでは「`」(バッククォート)が必要ないのに対し、他のテーブルでは必要な場合があります。
  • この差異は、テーブル名やカラム名が予約語や特殊文字を含む場合に発生し、バッククォートが必要な場合があるためです。
回答を見る
  • ベストアンサー

insert文等で「`」の有無で失敗するテーブルとしないテーブルがある。

XAMPP(winXP、PHP4)を使っています。 Aのテーブルでは $query= "insert into table (a,b,c,d) values('1','2','3','4')"; $result = mysql_query($query); でデータが追加されるのに、Bのテーブルでは失敗しました。 今日ずっと何が間違っているのかわからなかったのdですが、 $query= "insert into table (`a`,`b`,`c`,`d`) values('1','2','3','4')"; $result = mysql_query($query); とすると成功しました。 なぜAのテーブルでは「`」が無くても成功したのに、Bのテーブルでは必要なのでしょうか。 宜しくお願いします。

  • MySQL
  • 回答数1
  • ありがとう数1

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

  • ベストアンサー
  • taskuni
  • ベストアンサー率71% (49/69)
回答No.1

テーブルBのカラム名に特殊な文字が入っている。 もしくは、予約語を使っているのではないでしょうか。 参考URLから引用 > 識別子が予約語である場合や、識別子に特殊文字が含まれている場合は、引用符として使用したバッククォート(「`」)文字でその識別子を必ず囲む必要があります。

参考URL:
http://dev.mysql.com/doc/refman/4.1/ja/legal-names.html
moonmist
質問者

お礼

ありがとうございました。 Bのテーブルには「limit」という予約語を使ってあったことが原因だったようです。 一つ勉強になりました。

関連するQ&A

  • A5:SQL Mk-2でテーブルは作れないのか?

    xamppとA5:SQL Mk-2ソフトを組み合わせてます。 phpmyadminでデータベースとテーブルを作ってMk-2でsql文 例としてselecto * from aaa;などは動きます。 しかしMk-2で CREATE TABLE shiire(scode CHAR(4),kosuu INT,sdate CHAR(7)); INSERT INTO shiire VALUES ('A002',35,'2003-04'); INSERT INTO shiire VALUES ('B002',24,'2003-05'); は作れません。phpmyadminのクエリでは作れます。 ご教授ください。

    • ベストアンサー
    • MySQL
  • 別テーブルからselectした値を他のテーブルにinsertしたいのですが、上手くできません

    以下のように行ったのですが、 全ての値が別テーブルにinsertされません。 $sql = "SELECT tbl_A.id, tbl_A.data FROM tbl_A "; $rst = mysql_query( $sql ); while ( $col = mysql_fetch_array( $rst ) ) { $sql = "INSERT INTO tbl_B (          date, id, data ) VALUES ( '" . date( 'Y-m-d' ) . "', '" . mysql_real_escape_string( $col['id'] ) . "', '" . mysql_real_escape_string( $col['data'] ) . "' )"; } このやり方では、テーブル内の1つの値しかinsertされません。 selectされた全ての値をinsertするにはどのようにしたら良いのでしょうか? よろしくお願いします。 DB:mysql5 SP:php5

    • ベストアンサー
    • MySQL
  • C++でMySQLへの接続を試みるも失敗してしまいました

    皆様こんにちは。 http://questionbox.jp.msn.com/qa3838662.html http://okwave.jp/qa4845183.html 上記URLのページの内容とほぼ同一でしたので、 参考にしつつ、 C++でMySQLへの接続を行い、 プログラムの動作中で得る変数を DB内のテーブルに insertするプログラムを書いてはみたものですが、 どうもうまく行かず困っています。 プログラム内で実行したかったのは、 プログラム内で得た2つの変数を MySQLに登録するという内容でした。 プログラムを動かすと、 「不正な命令です」とプログラムが止まるのですが、 どこで止まるかを1つづつ確認したら、 MySQLにinsertコマンドを出すところで 止まるのが分かりました。 insertする2変数(「answer1」と「answer2」)は共に、 英数字で構成される100文字以内のものです。 インサートしたいテーブル名は「table_0413」としています。 テーブル「table_0413」には、 「A1」と「A2」という名前の2つのカラムを設けています。 ---------------------------------------------------------- char query[256]; if(sprintf(query, "INSERT INTO table_0413 VALUES (%s,%s)", answer1, answer2)); mysql_query(conn, query); ---------------------------------------------------------- どうすれば、 プログラム内で得た2変数の値を、 正常にDBにinsertできるようになるのでしょうか? 簡単な内容でしたら、 申し訳ありませんが、 アドバイスいただけると、とても嬉しいです。 宜しくお願いします。

  • "と'の使い方を教えていただけないでしょうか

    お世話になります。 "と'の使い方で悩んでおります。 POSTでname="a"のINPUTBOXからデータを送信し、それをPHPで受けて、MySQLのテーブルのカラムに挿入するスクリプトで悩んでいます。 次のようにすると、うまく動作します。 mysql_query("INSERT INTO tb VALUES ('$_POST[a]')"); あるいは $b=$_POST[a];や$b=$_POST['a'];や$b=$_POST["a"];で mysql_query("INSERT INTO tb VALUES ('$b')"); 次のようにすると、失敗します。 mysql_query('INSERT INTO tb VALUES ("$_POST[a]")'); あるいは $b=$_POST["a"];などで mysql_query('INSERT INTO tb VALUES ("$b")'); これは私の環境だけで起こることなのでしょうか。 むしろ' 'で囲うと、文字そのものが展開されるので"$_POST[a]"としなければいけないと思うのですが。いかがでしょうか。 また、そもそも$_POST[a]で受け取るときに添字にクォーテーションはつけなくてもよいのでしょうか。 どなたか、お教えいただけないでしょうか。あるいはヒントだけでも助かります。 どうか、よろしくお願いいたします。

    • ベストアンサー
    • PHP
  • マルチテーブル・インサート

    ご教授よろしくお願い致します。 現在、table_aにInsertされたカラム(no,name)のデータを同時にtable_bにも反映するSQL文を考えております。 【table_a】              no | name | price               ==============         005  apple   500         001  banana  250         【table_b】 no | name | color ================= 005  apple   red 001  banana  yellow Insertをそれぞれのテーブルで実行すれば、もちろん反映はできるのですが一度のInsert文でできるのならそれにこしたことはありません。 いろいろ調べた結果、下記のサイトでできるようなことが記載してあったため、実行したのですが、『ALL』がシンタックスエラーとなってしまいます。 そのため、postgresのマニュアルを確認してみたところ、Insert文にALL句の指定は特別記載されていなかったため、できないとも思っているのですが… サイト↓ http://www.atmarkit.co.jp/fdb/rensai/sqlclinic12/sqlclinic12_1.html サイトを参考にしたSQL文 『INSERT ALL INTO table_a(no,name) VALUES(005,apple) INTO table_b(no,name) VALUES(005,apple); 』 何か良い方法をご存知の方がいましたら、ご教授よろしくお願い致します。同じことをUpadteでもやらなければいけないのですが、それはもう少し自分で考えてみます。 只、できないことが明白な場合は、ご指摘を頂けると有難いです。 環境としましては、 OS 【Windows xp】 DB 【PostgreSQL 8.2】 です。

  • 複数テーブルの更新方法について

    会員情報の登録処理について 会員情報を管理するテーブルが3つあります。 もし、下記の(2)(3)でエラーのとき 中途半端に会員基本情報のみ出来てしまいます。 このときロールバックみたいな機能があるのでしょうか? みなさんは、このような場合どのように対応しているのでしょうか? ご指導よろしくお願いします。 【環境】 MYSQL:ver5 PHP:ver5 他に特にありません テーブル (1)会員基本情報 :staff  ※必ず存在する (2)会員関連情報1:staff_op1  ※ないときもある 画面選択項目で会員ごとに選択件数が違うため別テーブルにしている。  例:好きな○○のジャンルなど複数選択みたいな... (3)会員関連情報2:staff_op2  ※ないときもある  例:好きな○○のジャンルなど複数選択みたいな... //会員基本情報登録 $sql = "INSERT INTO staff ('staff_cd') VALUES ('12345')"; $result=mysql_query($sql); if($result){ //会員基本情報登録がOKのとき //会員関連情報1を登録(実際は選択件数分ループが必要) $sql = "INSERT INTO staff_op1 ('staff_cd','item1') VALUES ('12345','00001')"; $result=mysql_query($sql); if($result){ //会員関連情報1登録がOKのとき //会員関連情報2を登録(実際は選択件数分ループが必要) $sql = "INSERT INTO staff_op2 ('staff_cd','item1') VALUES ('12345','00001')"; $result=mysql_query($sql); if($result){ } else{ $error[] = "insert staff_op2 table err" } } else{ $error[] = "insert staff_op1 table err" } } else{ $error[] = "insert staff table err" } if(!$error){ $error[] = "会員情報登録完了!" }

    • 締切済み
    • PHP
  • update文の副問い合わせ使用

    2つのテーブルを結合して、片方のテーブルをUpdateしたいが、Update文での結合方法がよくわかりません。 table_a の excode列が更新対象で、table_aのname列とtable_bのname列の等価結合です。 テーブルとデータの例は以下です。 テーブル1:table_a create table table_a (code int(3), name varchar(10), excode int(6)); insert into table_a values (101,'あいう',0),(102,'かきく',0),(103,'たちつ',0),(201,'なにぬ',0),(301,'わをん',0); テーブル2:table_b create table table_b (excode int(6), name varchar(10)); insert into table_b values (500101,'あいう'),(500102,'かきく'),(500103,'たちつ'); 期待する結果は以下です。 SQL> select * from table_a; +------+--------+--------+ | code | name | excode | +------+--------+--------+ | 101 | あいう | 500101 | | 102 | かきく | 500102 | | 103 | たちつ | 500103 | +------+--------+--------+ MySQLバージョンは、5.0です。 よろしくお願いいたします。

  • 複数テーブルの更新方法について

    会員情報の登録処理について 会員情報を管理するテーブルが3つあります。 もし、下記の(2)(3)でエラーのとき 中途半端に会員基本情報のみ出来てしまいます。 このときロールバックみたいな機能があるのでしょうか? みなさんは、このような場合どのように対応しているのでしょうか? ご指導よろしくお願いします。 【環境】 MYSQL:ver5 PHP:ver5 他に特にありません テーブル (1)会員基本情報 :staff  ※必ず存在する (2)会員関連情報1:staff_op1  ※ないときもある 画面選択項目で会員ごとに選択件数が違うため別テーブルにしている。  例:好きな○○のジャンルなど複数選択みたいな... (3)会員関連情報2:staff_op2  ※ないときもある  例:好きな○○のジャンルなど複数選択みたいな... //会員基本情報登録 $sql = "INSERT INTO staff ('staff_cd') VALUES ('12345')"; $result=mysql_query($sql); if($result){ //会員基本情報登録がOKのとき //会員関連情報1を登録(実際は選択件数分ループが必要) $sql = "INSERT INTO staff_op1 ('staff_cd','item1') VALUES ('12345','00001')"; $result=mysql_query($sql); if($result){ //会員関連情報1登録がOKのとき //会員関連情報2を登録(実際は選択件数分ループが必要) $sql = "INSERT INTO staff_op2 ('staff_cd','item1') VALUES ('12345','00001')"; $result=mysql_query($sql); if($result){ } else{ $error[] = "insert staff_op2 table err" } } else{ $error[] = "insert staff_op1 table err" } } else{ $error[] = "insert staff table err" } if(!$error){ $error[] = "会員情報登録完了!" }

  • PHPによるSQL文の中にPHP処理を記述するには

    PHP内のSQL発行部分の $QUERY="     INSERT     INTO         TABLE     (         `FIELD_A`,         `FIELD_B`,         `FIELD_C`     ) values (         `{$DATA[1]}`,         `{$DATA[2]}`,         `{$DATA[3]}`     ) "; このようなクエリを $QUERY="     INSERT     INTO         TABLE     (         `FIELD_A`,         `FIELD_B`,         `FIELD_C`     ) values (         `{$DATA[($i++)]}`,         `{$DATA[($i++)]}`,         `{$DATA[($i++)]}`     ) "; のような感じにしたいのですが うまくいきません。 どうすれば、クエリー文の中で$i++等の処理を 含まさせることができるでしょうか?

    • ベストアンサー
    • PHP
  • INSERT文でフィールドの1つだけを他のテーブルから取ってきた値を入れたい

    挿入するフィールドの内1つだけを他のテーブルから取ってきた値を使いたいのですが、 insert into table1 (field1, field2, field3) values('a', (select field2 from table2 where field4='xxx'), 'b'); Oracleだと↑の書き方でいけるのですが、PostgreSQL(6.5.3)だとエラーになってしまいます。 2回もDBにアクセスしにいくのはいやなので、1文で書きたいです。上記以外で他の書き方をご存知でしたら教えてください。よろしくお願いします。