• ベストアンサー

PHPのPostgresql インサート処理

PHPである携帯用アプリを作成しています。 ユーザ登録処理画面でパソコン上からDBにインサートすると成功するのに携帯からだとDBエラーになります。 インサートする項目は10項目あります。 エラー文は以下です。 Warning: pg_exec(): Query failed: ERROR: parser: parse error at ornear "," at character27 . in /~path名(セキュリティ上書きません) 他の処理でインサート項目が1つだとインサートが成功します。 原因がどうしてもわかりません。 Postgresqlの規約があるのでしょうか?それとも携帯での規約でしょうか? よろしくお願いします。

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

  • ベストアンサー
  • -kit
  • ベストアンサー率57% (12/21)
回答No.4

手元に環境がないので、よく覚えてませんが、 片方の SQL 文がたぶんおかしいような気がします。 Postgres の方の log で違いがないかどうかを チェックされた方がいいかと思います。 “27 文字辺り”だとすると、 「values(」の“(”の辺りなのかなぁ。。。 どういう変数を拾ってきているのかわかりませんが、 何か変数が抜け落ちていたりしませんか?

fm0606
質問者

お礼

数々のアドバイスありがとうございます。 原因がつかめました。 携帯にはレジスター機能がなく ある変数だけには値が入ってませんでした。 (PCだと成功するわけです。) その変数はプライマリキーの一つなので NULLがはいってしまいDBエラーがでたと 考えられます。 根気よくデバック作業をしていればよかったですね。 ほんとにありがとうございました。

その他の回答 (3)

  • -kit
  • ベストアンサー率57% (12/21)
回答No.3

文字コードはどちらも EUC ですか? あと「character27」ってどういう箇所ですか?

fm0606
質問者

補足

ありがとうございます。 $sql = "insert into g_user values($num,'$groupi','$gnamae','$gnicc','$gadd','$gbirth','$gkuse','$getc','','');"; というインサートのSQL文を使用しています。 character27がどれにあたるかわかりかねます。 よろしくお願いします。

  • kusukusu
  • ベストアンサー率38% (141/363)
回答No.2

pg_exec()(本当はpg_queryを利用した方がいいのですが)で発行しているSQL文を書いてみてください。

fm0606
質問者

補足

ご質問ありがとうございます。 $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)
回答No.1

ウェブや携帯では、HTTP のGET コマンドでの入力ですか? httpd のログに違いはありますか?

fm0606
質問者

補足

そうですね、携帯ではメソッドがGETしか受け付けないという会社もありましたのでGETで統一さしています。 httpdのログに違いはありませんでした。 問題はDBの方かと推測していますが間違ってますで しょうか? よろしくお願いします。

関連するQ&A