• 締切済み

php mysql INSERT

mysqlのデータ登録の際に値が空だとエラー文が表示されてしまいます。 エラー文は 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 にでます。 なお、mysqlのバージョンは5.1です。 試行錯誤で試したのですが、なかなかできないためわかる方がいましたら宜しくお願いします。 ソースは foreach((array) $test1 as $key => $val){ if($val !== "" && $test2[$key] !== "") { $vals .= ","; $vals .= "('$val','$test2[$key]')"; } } if($vals !== "") { $vals = trim($vals,','); $testQuery = sprintf("INSERT INTO `home_scorer` (`test1`,`test2`) VALUES" .$vals); $testResult = mysql_query($testQuery, $link) or die(mysql_error()); } test1 と test2に値が入っていれば登録はさせるのですが、値が入っていないときはINSERTしない状態にできればと思います。 宜しくお願いします。

  • PHP
  • 回答数2
  • ありがとう数2

みんなの回答

  • yambejp
  • ベストアンサー率51% (3827/7415)
回答No.2

>$contactId = $_GET[contactid]; >$contactIdが123だとすると、 > >foreach((array) $test1 as $key => $val){ >if($val !== "" && $test2[$key] !== "") { >$vals .= ","; >$vals .= "('$contactId','$val','$test2[$key]')"; >} >} >この場合$vals = "('123','','')"; >となりますが、この内容だとエラーがでます。 いや、フロー的にはmysql_queryは実行されないのでエラーがでません。 なにか凡ミスがあるんじゃないですか? とりあえず $vals =""; foreach((array) $test1 as $key => $val){ ・・・ のように$valsを初期化してみてください。 test1とtest2の配列にデータがなければ$valsにデータはたされないフローです。 当然$valsが空なので、mysql_queryも実行されません。 ところどころにデバッグ用のprintを埋め込んでチェックしてみては?

h20060604
質問者

お礼

$valsを初期化したところできました。 有難う御座います。

  • yambejp
  • ベストアンサー率51% (3827/7415)
回答No.1

$testQuery の文字列にSQLの文法エラーがあるようなので $testQueryを例示してください。 基本的に$valsが空であれば、クエリーが回らないようになっているはずですが・・

h20060604
質問者

お礼

ご回答有難うございます。 http://oshiete.goo.ne.jp/qa/6893798.htmlの内容を参考に作らせていただきました。 例えばですが、今は$test1、$test2とありますが、この他にGETで受け取る値があった場合はどーなるのでしょうか? お問い合わせIDみたいなものだとして、必ず値が付与されます。 $contactId = $_GET[contactid]; $contactIdが123だとすると、 foreach((array) $test1 as $key => $val){ if($val !== "" && $test2[$key] !== "") { $vals .= ","; $vals .= "('$contactId','$val','$test2[$key]')"; } } if($vals !== "") { $vals = trim($vals,','); $testQuery = sprintf("INSERT INTO `home_scorer` (`contact_id`,`test1`,`test2`) VALUES" .$vals); $testResult = mysql_query($testQuery, $link) or die(mysql_error()); } と$valsの中に$contactIdがつくと思います。 この場合$vals = "('123','','')"; となりますが、この内容だとエラーがでます。 $test1、$test2に値が入っていればもちろんですが、INSERTされます。 やはりSQLの文法がおかしいだけなのでしょうか?

関連するQ&A

  • MySQL insert文に関するエラーについて

    ○質問の主旨 MySQLのデータベースにテーブルを作ってinsert文で データを追加しようとするとシンタックスエラーが出ます。 SQL文が間違っているのかと思いGoogle検索や本で調べたりしましたが、 なぜ文法エラーが発生するのか分かりません。 エラーと対処方法をご存知の方がいらっしゃいましたらご教示願います。 ○質問の補足 // usersテーブル create table users ( id int not null auto_increment primary key, created datetime not null, modified datetime not null, username varchar(255), password varchar(40) ); desc users; +----------+--------------+------+-----+---------+----------------+ | Field | Type | Null | Key | Default | Extra | +----------+--------------+------+-----+---------+----------------+ | id | int(11) | NO | PRI | NULL | auto_increment | | created | datetime | NO | | NULL | | | modified | datetime | NO | | NULL | | | username | varchar(255) | YES | | NULL | | | password | varchar(40) | YES | | NULL | | +----------+--------------+------+-----+---------+----------------+ insert into users (created, modified, username, password) values (now(), now(), 'test1', 'test1'), (now(), now(), 'test2', 'test2') ); ERROR 1064 (42000): 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 3

    • ベストアンサー
    • MySQL
  • PHP+MySQL利用でDB登録に不具合が出てしまいます・・・

    はじめまして。 PHP+MySQL利用初心者です。 現在、MySQLの「text」属性の項目に「測定不能」とINSERTしようとすると、 ↓のようなエラーが発生してしまいます。 【1064: 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 '005')' at line 1】 どのようなSQLが実行されているか見てみましたら測定不能」と画面で入力したのに「'測定不能\'」となっていました。 「測定不可」と画面入力した場合はSQL文も「測定不可」と流れて正常にINSERT出来ます。 このような現象に詳しい方アドバイスお願い致します。

    • ベストアンサー
    • PHP
  • PHP/mySQLでインサートができません。

    PHPとmySQLを勉強中の初心者ですが、よろしくお願いします。 PHPで簡単なインサート文を作ってそれをmySQLに保存しようとしているのですが、以下のエラーが出てしまいます。 Warning: mysql_query(): supplied argument is not a valid MySQL-Link resource プログラムは以下の通りです。HOSTNAME,USERNAME,DBPWDは別のところで定義していますが、mysql_connect, mysql_select_dbではエラーにならないので、データベースの選択まではうまく行っていると思うのですが。 $conn = mysql_connect(HOSTNAME, USERNAME, DBPWD); if(!$conn){ die("Logon Failure to mysql Server."); } $db = mysql_select_db(DBNAME, $conn); if(!$db){ die("Cannot access to the DB"); } foreach($csv_ary as $a => $b) { $query = "INSERT INTO TEST field_a VALUES $a"; if (!mysql_query($query, $db)){ echo "更新失敗: SQL=$query<br>"; } } mysql_close($conn); field_aはvarchar(10)でPrimary_key, NOT NULLの設定です。 Foreachで展開した配列の値はちゃんと長さ10の文字列が入っています。 PHP 4.3.11は mySQL 4.0.27です。 よろしくお願いします。

    • ベストアンサー
    • PHP
  • DBD::mysqlで「表」という文字をテーブルへインサートしたい

    お世話になります。 環境は windows2000pro perl 5.8.8 mysql 5.0.22 です。 mysqlの文字コード関連の設定はmy.iniにてsjisに統一してあります。 DBIを使って、perlスクリプトからmysqlのテーブルへ「表」という文字をインサートしようとするとエラーになります。mysqlクライアントからならちゃんと「表」もインサートできました。 エラーは以下のようになっています。 「 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表 」 とにかくインサートしようとする文字列の最後の文字が「表」なら同様のエラーになります。 「表示」なら問題なくインサートできます。表の2バイト目が5cなのがまずいと思うのですが、どう対処すればよいかわかりません。 ヒントを下さい。よろしくお願いします。 ----- use strict; use DBI; use Encode qw(from_to); my $str = "表"; from_to($str,'utf8','shiftjis'); eval { my $dbh = DBI->connect( 'dbi:mysql:test,hostname=localhost', 'root','bnogl399',{ RaiseError => 1, PrintError => 0}); $dbh->do("set names sjis"); $dbh->do("use mydb"); $dbh->do("insert into foo values (3, " . $dbh->quote($str) . ")"); $dbh->disconnect(); }; print $DBI::errstr if $@;

  • MySQLのエラー

    はじめまして。 MySQLでエラーが出てしまい改善するのに困っています。 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... とでます。 「よくわかるPHPの教科書(P202)」という本を見ながらすすめているのですが、 このエラーが言っているのは、 「サーバーのバージョンが本と異なるから、あなたのサーバーにあわせたコマンド入力をしなさい」 ってことなのでしょうか? よろしくお願い致します。

  • PHPとMYSQLでデータ登録

    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 上記のようにエラーでました。分かる方いらっしゃいましたらよろしくお願いします。 ソースは下の通りです。 <?php $con = mysql_connect("localhost","root","matsushima") or die(mysql_error()); mysql_select_db("koukou") or die(mysql_error()); $sql = "insert into area(name_area) values('".$_POST[name_area]."')";//SQL文の作成 $res = mysql_query($sql) or die(mysql_error());//クエリの実行 mysql_close($con);//切断 ?> <html> <head> <title>登録完了画面(サンプルリスト)</title> <meta name="keywords" content="入力フォーム,確認画面,サンプル"> </head> <body> <p>

  • エラーをいくらチェックしてもDB Error: syntax errorがでてしまいます。

    MySQLで困ってます。 簡単な会員登録スクリプトを作っているのですが、以下のエラーが出てしまって動きません。 DB Error: syntax error INSERT INTO group (name,pwd) VALUES ('test','test') [nativecode=1064 ** 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 'group (name,pwd) VALUES ('test','test')' at line 1] PWDは実際の運用ではmd5()で暗号化する予定です。 SQL文をいくら見てもエラーが無いように思えるのですが、 どうしたものでしょうか? ちなみにサーバはロリポップを使っています。

    • ベストアンサー
    • MySQL
  • PHP+MySQL SQL文を外部ファイル化したい。

    表題のとおりなのですが… $result = mysql_query( "SELECT * FROM FOO" ); では、動作しています。 このセレクト文を、selectFOO.sql として外部ファイル化し、 (ファイルの中身は、「SELECT * FROM FOO」) $result = mysql_query( selectFOO.sql ); とすると、 1064 : 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 'selectFOO.sql' at line 1 が返ってきます。 SQL文が正しくないよ。マニュアル見てね。 と言われてるのは分かるのですが、 マニュアルのどこを見れば良いのかさえ分かりません。 助けてください。 よろしくお願いします。

    • 締切済み
    • PHP
  • Mysql DATE型のDEFAULT値

    初心者ですが、よろしくお願いします。 Mysqlでテーブルを作成して、カラムにDATE型を指定するとDEFAULT値が設定できません、、、。 これはMysqlの仕様なのでしょうか? ちなみに、TIMESTAMP型だと、'DEFAULT CURRENT_TIMESTAMP'でDEFAULT設定できます、、。 -- クエリ CREATE TABLE test ( column_name DATE NOT NULL DEFAULT CURRENT_DATE ); >> エラー ERROR 1064 (42000): 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 'CURRENT_DATE)' at line 1 Mysql::ABも調べたのですが、よく分かりませんでした。 よろしくお願いします。 MySQLバージョン 5.0.41

  • PHP+MySQLで文が正しいのに実行されません

    $s_id = "guest"; $s_pw = "guest"; この状態で SELECT * FROM account WHERE id='$s_id', pass='$s_pw' を実行すると 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 ' pass='guest'' at line 1 というエラーが発生します。 idもguestもあるのになぜこのようなエラーが出てしまうのでしょうか?

    • ベストアンサー
    • MySQL

専門家に質問してみよう