我正在尝试编写执行以下操作的脚本。收取用户的电子邮件并将其添加到数据库中,但如果用户的电子邮件已存在,则拒绝。
<?
require_once('includes/db.php');
$email = mysqli_real_escape_string($link, $_POST['email']);
$dupesql = "SELECT * FROM emails where (email = '$email')";
$duperaw = mysqli_query($link, $dupesql);
if(int mysql_num_rows($duperaw) > 0){
echo 'Error already in there';
}
else {
$sql = "INSERT INTO emails(email)
VALUES('$email')";
$result = mysqli_query($link, $sql);
header('Location: poll/poll.php');
}
// close mysql
mysqli_close($link);
?>
答案 0 :(得分:0)
试试这个
$mysqli->real_query('INSERT INTO '.$table.' ('.$cols.') VALUES ('.$vals.')');
答案 1 :(得分:0)
更改您的代码如下:
$dupesql = "SELECT * FROM emails where email = '$email'";
$duperaw = mysqli_query($link, $dupesql);
if(mysql_num_rows($duperaw)==1){
echo 'Error already in there';
}
答案 2 :(得分:0)
您正在将mysqli_
与mysql_
混合,这是此处的主要问题。
使用mysqli_num_rows
代替mysql_num_rows
答案 3 :(得分:0)
你不应该混合使用mysqli()和mysql()。 并删除 int 错误转换。
//...
if(mysqli_num_rows($duperaw) > 0){
echo 'Error already in there';
}
//...
答案 4 :(得分:0)
为什么不让mysql来处理呢?如果您希望email
是唯一的,请为email
定义唯一索引:
CREATE UNIQUE INDEX email_index ON emails (email)
现在您只需要在插入后检查是否有任何行受到影响:
if (mysqli_affected_rows()>0) {
//success, email inserted
} else {
// rejected
}
通过这种方式,您将不再调用数据库,并使代码更简单,imho。