- 締切済み
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しない状態にできればと思います。 宜しくお願いします。
- みんなの回答 (2)
- 専門家の回答
みんなの回答
- yambejp
- ベストアンサー率51% (3827/7415)
>$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を埋め込んでチェックしてみては?
- yambejp
- ベストアンサー率51% (3827/7415)
$testQuery の文字列にSQLの文法エラーがあるようなので $testQueryを例示してください。 基本的に$valsが空であれば、クエリーが回らないようになっているはずですが・・
お礼
ご回答有難うございます。 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の文法がおかしいだけなのでしょうか?
お礼
$valsを初期化したところできました。 有難う御座います。