• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:PHP+mysql データ重複登録)

PHP+mysql データ重複登録

このQ&Aのポイント
  • 上記SQL(1)、(2)どちらでDBに登録しても、登録情報のように同時に空データも同時に登録されてしまう
  • 全く原因の検討がつかないので、何か手がかりがありましたらご教授頂けたらと思います。
  • PHPバージョン5.3.3、mysqlバージョン4.1.22の環境で、テーブル情報はname, mail, memoのカラムを持ち、INSERT文でデータを登録しています。

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

  • ベストアンサー
  • seastar3
  • ベストアンサー率69% (99/142)
回答No.3

うまくいきませんか。 それではtimestamp型はやめて、datetime型にして、 $tmstmp = date("Y-m-d H:i:s"); $sqlstr = "insert into test(name, mail, memo, updating) values ('abc','abc@test.com','abc'," . $tmstmp . ")"; mysql_query($sqlstr, $conn); といった操作を挿入クエリ発行の度にやってみてはどうでしょうか? また、mysqlのinsert命令は、1文で一度に複数レコードを挿入できるようですから、insert命令の文字列の末尾に何か付いているのかもしれません。 これも助言のみで確かめていませんけど、あしからず。

cwm474
質問者

お礼

seastar3さん  お礼が遅くなり、すみません。  datetime型に変更してみましたが、やはりうまくいかずでした。  >また、mysqlのinsert命令は、1文で一度に複数レコードを挿入できるようですから、insert命令の文字列の末尾に何か付いているのかもしれません。  こちらの対応もしてみました。この対応だけだったと思うのですが、うまくいくようになりました!  単純な登録だけと思っていたのですが、今回は色々と勉強になりました。  貴重なアドバイスありがとうございました!!大変助かりました。

その他の回答 (4)

回答No.5

もしかして?と思ったのですが、モバイルの振り分け(htaccess)などで2回のリクエストが発生していませんか?

cwm474
質問者

お礼

 kosukejlampnetさん  お礼が遅くなってすみません。  デバックで確認しても、今回クエリーが2回処理されているのは確認できませんでした。  再度のアドバイスありがとうございました。とても参考になりました。

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

いざとなったら・・・ 最後に「delete from テーブル where name=''」などで 怪しいデータを削除しちゃうとか・・・

cwm474
質問者

お礼

 yambejpさん  お礼が遅くなってすみません。  アドバイスありがとうございました。  リアルタイムでデータを確認したいので、今回この方法は利用できませんでした。

回答No.2

''(空文字)!=NULL ですよ。 フィールドの定義でNOT NULLを設定しても、''はNULLではないのでデータは追加されます。 insert test set name=NULL, mail=NULL, memo=NULL ならデータは挿入されません。

cwm474
質問者

お礼

 kosukejlampnetさん  ご回答ありがとうございます。  name、mail、memoカラム全てアプリの方で、必ず文字列が格納されていることを確認してからの、DBへの登録になるのでNULLまたは、空文字で登録されることはないのですが、insert処理した後、空文字が自動的に挿入されてしまうのです。

cwm474
質問者

補足

sql文を直接、コマンドで実行すると、正常に一行のみ挿入されました。 ちなみに、PC、モバイルとも同じ処理を行っているのですが、モバイルからの登録のみこの現象が確認されました。

  • seastar3
  • ベストアンサー率69% (99/142)
回答No.1

こちらのいぞるでさんのブログの受け売りですが、 http://isoldeblog.blog93.fc2.com/blog-entry-14.html テーブル定義で updating フィールドに NOT NULL default CURRENT_TIMESTAMP を設定しておくと、レコード挿入後に自動的に新レコードを作ってしまうのかもしれません。 対応として、 on update CURRENT_TIMESTAMP を付け加えればいいのではないでしょうか。 検証なしですがあしからず。

cwm474
質問者

お礼

seastar3 さん   ご回答ありがとうございました! ご紹介頂いた方法で、新規データ作成しましたがやはり結果は同じでした。 でも、timestampについてとても勉強になりました!

cwm474
質問者

補足

テーブル情報を下記に変更しても、自動的に新レコードが追加されてしまいます。 updating timestamp NULL default CURRENT_TIMESTAMP on update CURRENT_TIMESTAMP,