アプリ版:「スタンプのみでお礼する」機能のリリースについて

phpからCSVに吐き出して重複チェックを考えていたのですが
大変そうなので、mysqlを導入し、php+mysqlで重複チェックを行なうことにしました。

nameをユニークインデックスにしたところ
同じ名前は登録されなくなったのですが
できれば、「その名前は登録済みです!」と表示させたいです。

エラーコードかなにかを使って
判断するのでしょうか?


以上、宜しくお願いいたします。


-----文字数の関係で一部削除しております。-----

<?php

//DBへ接続開始
$link = mysqli_connect($host, $user, $password, $database);
if (!$link)
{
print("接続できませんでした");
exit();
}

/* 文字セットを utf8 に変更します */
mysqli_set_charset($link, "SJIS");


//オートコミットOFF
mysqli_autocommit($link, FALSE);

// ステートメントの設定
$sql = 'INSERT INTO not_schoolmate (id,name,) VALUES(?,?)';

$stmt = mysqli_prepare($link, $sql);

mysqli_stmt_bind_param( $stmt,"ss", $id, $name );


// 値設定

if($errflg == 0){

$id = $_POST["id"];
$name = $_POST["name"];


//SQL文を実行する
mysqli_stmt_execute($stmt);

//コミットする
mysqli_commit($link);

//ステートメントクローズ
mysqli_stmt_close($stmt);

?>

A 回答 (4件)

こんにちは。



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

この回答への補足

とりあえず、以下で対応できました。


//重複チェック
$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;
}

補足日時:2012/01/20 09:38
    • good
    • 0
この回答へのお礼

ご連絡ありがとうございます。

select文はコミットする前でしょうか?

お礼日時:2012/01/16 15:40

ごめんなさい、勘違い


プレペアドの処理でしたね。

具体的なエラーを拾ってみればわかるかもしれません。

http://www.php.net/manual/ja/mysqli.error.php
    • good
    • 0
この回答へのお礼

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

お礼日時:2012/01/20 09:36

>$sql = 'INSERT INTO not_schoolmate (id,name,) VALUES(?,?)';



2個所怪しい点があります。
・nameの後ろのカンマがいりません
・nameが文字列だとしたら、VALUESで与えるデータがきちんとエスケープされているか
くわえてクォーテーションで囲まれていますか?
    • good
    • 0
この回答へのお礼

確認したところ、nameの後ろにカンマは入っていませんでした。


nameは入力フォームから受け取ったデータとなります。

エスケープされているか
どのように確認すれば宜しいでしょうか?

お礼日時:2012/01/16 14:13

#1さんのほかには



INSERT IGNORE INTOでデータを投入し、
mysql_affected_rowsでチェックすればよいかと
(戻り値が1なら投入された、0ならすでにデータが存在する)

http://php.net/manual/ja/function.mysql-affected …
    • good
    • 0
この回答へのお礼

ご連絡ありがとうごさいます。

$sql = 'INSERT INTO not_schoolmate (id,name,) VALUES(?,?)';

の下に以下を入れてみたのですがエラーになってします。

記述場所が悪いのでしょうか?

文法的な問題でしょうか?



$test = mysqli_affected_rows();

if($test == 0){
echo "そのアカウントは既に登録されています。<BR>";
$errflg = "1";
}else{
echo "そのアカウントは登録されていません。";
}


以上、宜しくお願いいたします。

お礼日時:2012/01/16 11:22

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!