携帯サイトを構築しております。登録画面にてSELECT+INSERT文
携帯サイトを構築しております。登録画面にてSELECT+INSERT文にてDuplicate entry for keyというエラーがでてしまいます。解決方法がわからない状態です。ご教授お願いいたします。ちなみにIDはPRIMARYでauto_incrementで、mailとNoは個別でUNIQUE KEYに設定しております。
<?php
// データベースに接続する
$conn = mysql_connect("xxxx","xxxxx","123456") or die("接続エラー");
mysql_query("set character set sjis") or die("エラー");
mysql_select_db("aaa") or die("接続エラー");
//すでに登録済みかどうか調べる
$sql = sprintf("SELECT mail,No FROM users where (mail = '%s')or(No = '%s')",
mysql_real_escape_string($mail),
mysql_real_escape_string($No));
$res = mysql_query($sql, $conn) or die("データ抽出エラー");
$count = mysql_num_rows($res);
//データが抽出できたときはすでに登録済みと判断できる
if($count > 0) {
print '<font color="red">既に登録されております</font><br />
<a href="login.html">こちらからログインしてください</a>';
}
?>
<?php
DBに接続
$con = mysql_connect("xxxxxxx","xxxxxx","4123456")or die(mysql_error());
mysql_query("set character set sjis") or die("エラー");
mysql_select_db("xxxxxxx")or die(mysql_error());
$sql = "INSERT INTO users(name,kana,nick,sex,pass,mail,No,date)VALUES('".$name."','".$kana."','".$nick."','".$sex."','".$pass."','".$mail."','".$No."',NOW())";
$res = mysql_query($sql) or die(mysql_error());
mysql_close($con);
function mysql_insert_string($table_name, $values) {
$names = '`'.implode('`,`', array_keys($values)).'`';
$values = implode(',', array_map(mysql_escape, $values));
return "INSERT INTO `{$table_name}` ({$names}) VALUES({$values});";
}
function mysql_escape($value) {
switch (true) {
case is_null($value) : return 'NULL';
case is_bool($value) : return $value ? 1 : 0;
case is_numeric($value) : return $value;
default : return "'".mysql_real_escape_string($value)."'";
}
}
?>
お礼
すばやいご回答ありがとうございます。 意味がすっきりしました。