- ベストアンサー
PHPのPostgresql インサート処理
PHPである携帯用アプリを作成しています。 ユーザ登録処理画面でパソコン上からDBにインサートすると成功するのに携帯からだとDBエラーになります。 インサートする項目は10項目あります。 エラー文は以下です。 Warning: pg_exec(): Query failed: ERROR: parser: parse error at ornear "," at character27 . in /~path名(セキュリティ上書きません) 他の処理でインサート項目が1つだとインサートが成功します。 原因がどうしてもわかりません。 Postgresqlの規約があるのでしょうか?それとも携帯での規約でしょうか? よろしくお願いします。
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
手元に環境がないので、よく覚えてませんが、 片方の SQL 文がたぶんおかしいような気がします。 Postgres の方の log で違いがないかどうかを チェックされた方がいいかと思います。 “27 文字辺り”だとすると、 「values(」の“(”の辺りなのかなぁ。。。 どういう変数を拾ってきているのかわかりませんが、 何か変数が抜け落ちていたりしませんか?
その他の回答 (3)
- -kit
- ベストアンサー率57% (12/21)
文字コードはどちらも EUC ですか? あと「character27」ってどういう箇所ですか?
補足
ありがとうございます。 $sql = "insert into g_user values($num,'$groupi','$gnamae','$gnicc','$gadd','$gbirth','$gkuse','$getc','','');"; というインサートのSQL文を使用しています。 character27がどれにあたるかわかりかねます。 よろしくお願いします。
- kusukusu
- ベストアンサー率38% (141/363)
pg_exec()(本当はpg_queryを利用した方がいいのですが)で発行しているSQL文を書いてみてください。
補足
ご質問ありがとうございます。 $sql = "insert into g_user values($num,'$groupi','$gnamae','$gnicc','$gadd','$gbirth','$gkuse','$getc','','');"; $res = pg_exec($conn,$sql); if(pg_cmdtuples($res) == 0){ print("<h2 bgcolor=#FFCC00>登録失敗</h2><br>"); print("<a href='toptop.php?num=$_POST[num] &adnam=$_POST[adnam]'>戻る</a>\n"); exit; } です。 pg_queryの方がよろしいでしょうか?
- -kit
- ベストアンサー率57% (12/21)
ウェブや携帯では、HTTP のGET コマンドでの入力ですか? httpd のログに違いはありますか?
補足
そうですね、携帯ではメソッドがGETしか受け付けないという会社もありましたのでGETで統一さしています。 httpdのログに違いはありませんでした。 問題はDBの方かと推測していますが間違ってますで しょうか? よろしくお願いします。
お礼
数々のアドバイスありがとうございます。 原因がつかめました。 携帯にはレジスター機能がなく ある変数だけには値が入ってませんでした。 (PCだと成功するわけです。) その変数はプライマリキーの一つなので NULLがはいってしまいDBエラーがでたと 考えられます。 根気よくデバック作業をしていればよかったですね。 ほんとにありがとうございました。