• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:php+mysqlでの重複チェックについて)

php+mysqlでの重複チェックについて

このQ&Aのポイント
  • phpからCSVに吐き出して重複チェックを行なうことにしました。
  • mysqlを導入し、nameをユニークインデックスにした結果、同じ名前は登録されなくなりました。
  • エラーコードを使って判断することで、「その名前は登録済みです!」と表示させることができます。

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

  • ベストアンサー
  • LancerVII
  • ベストアンサー率51% (1060/2054)
回答No.1

こんにちは。 insertしてみてのエラーを拾っても良いですし、登録前にselectしてみてレコードが取得できたらエラーでも良いと思います。

regal38
質問者

お礼

ご連絡ありがとうございます。 select文はコミットする前でしょうか?

regal38
質問者

補足

とりあえず、以下で対応できました。 //重複チェック $account = $_POST["name"]; $sql = 'select * from xxxxxx where name = "'.$name.'";'; $rs = mysqli_query($link, $sql); $rows = mysqli_num_rows($rs); if($rows == 0){ } else { echo "交付申請に失敗しました。<BR><BR>"; echo "【".$name."】は既に登録されています。<BR>"; $errflg = 1; }

その他の回答 (3)

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

ごめんなさい、勘違い プレペアドの処理でしたね。 具体的なエラーを拾ってみればわかるかもしれません。 http://www.php.net/manual/ja/mysqli.error.php

regal38
質問者

お礼

ありがとうございます。 こちらも試してみたいと思います。 また何かありましたら宜しくお願いします。

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

>$sql = 'INSERT INTO not_schoolmate (id,name,) VALUES(?,?)'; 2個所怪しい点があります。 ・nameの後ろのカンマがいりません ・nameが文字列だとしたら、VALUESで与えるデータがきちんとエスケープされているか くわえてクォーテーションで囲まれていますか?

regal38
質問者

お礼

確認したところ、nameの後ろにカンマは入っていませんでした。 nameは入力フォームから受け取ったデータとなります。 エスケープされているか どのように確認すれば宜しいでしょうか?

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

#1さんのほかには INSERT IGNORE INTOでデータを投入し、 mysql_affected_rowsでチェックすればよいかと (戻り値が1なら投入された、0ならすでにデータが存在する) http://php.net/manual/ja/function.mysql-affected-rows.php

regal38
質問者

お礼

ご連絡ありがとうごさいます。 $sql = 'INSERT INTO not_schoolmate (id,name,) VALUES(?,?)'; の下に以下を入れてみたのですがエラーになってします。 記述場所が悪いのでしょうか? 文法的な問題でしょうか? $test = mysqli_affected_rows(); if($test == 0){ echo "そのアカウントは既に登録されています。<BR>"; $errflg = "1"; }else{ echo "そのアカウントは登録されていません。"; } 以上、宜しくお願いいたします。