我正在创建一个评论系统,当有新评论时,我会给他们发电子邮件.
我在phpMyAdmin中创建了一个名为email_notifications的表.
问题出在这个代码上:
if(mysql_num_rows(mysql_query("SELECT * FROM email_notifications WHERE email='$email'") or die(mysql_error())) <= 1) {
mysql_query("INSERT INTO email_notifications (email) VALUES ('$email')");
echo mysql_num_rows(mysql_query("SELECT * FROM email_notifications WHERE email='$email'"));
}
else{
die('EMAIL!');
}
Run Code Online (Sandbox Code Playgroud)
这是为了防止同一封电子邮件中的多个电子邮件出现在该表中.而现在mysql_num_rows表示有7行.
所以现在的声明说:
if(7 <= 1) {
mysql_query("INSERT INTO email_notifications (email) VALUES ('$email')");
echo mysql_num_rows(mysql_query("SELECT * FROM email_notifications WHERE email='$email'"));
}
else{
die('Can\'t post this email! Sorry.');
}
Run Code Online (Sandbox Code Playgroud)
问题是它仍然将电子邮件地址插入表中,但它不应该.它应该是返回无法发布此电子邮件!抱歉.
这可能是我面临的最奇怪的问题,我无法弄清楚:(
请提前帮助,谢谢.
添加密钥有什么问题?
ALTER TABLE email_notifications ADD UNIQUE email (email)
Run Code Online (Sandbox Code Playgroud)
永远不必再担心重复.
显然,值mysql_num_rows(mysql_query("SELECT * FROM email_notifications WHERE email='$email'") or die(mysql_error())不等于7,因此小于或等于1.这就是为什么if语句没有按预期运行的原因.
另外,请格式化您的代码:
$query = mysql_query("SELECT * FROM email_notifications WHERE email='$email'") or die(mysql_error());
$numberOfRows = mysql_num_rows($query);
echo $numberOfRows; //check the number of rows.
if($numberOfRows <= 1) {
mysql_query("INSERT INTO email_notifications (email) VALUES ('$email')");
$query_ = mysql_query("SELECT * FROM email_notifications WHERE email='$email'");
var_dump(mysql_num_rows($query_));
}
else{
die('EMAIL!');
}
Run Code Online (Sandbox Code Playgroud)