我查看了网站上提供的其他解决方案,但只发现了那些对SQL注入开放的解决方案。如何计算具有相同电子邮件($em
)的行数并将其保存到变量?下面的代码也不起作用,也不显示任何错误。我该如何解决这个问题?
if (strtolower(filter_var($em, FILTER_VALIDATE_EMAIL))) {
$em = strtolower(filter_var($em, FILTER_VALIDATE_EMAIL));
$e_select = $con->prepare("SELECT email FROM users WHERE email=?");
$e_select->bind_param('s', $em);
$e_select->execute();
$e_select->bind_result($idkwhy);
$e_select->fetch();
$num_rows_em = $e_select->num_rows;
if ($num_rows_em > 0) {
array_push($error_array, "Email already in use<br>");
}
感谢您的帮助!
答案 0 :(得分:0)
您在MySQL方面寻找的主要内容是:
"SELECT COUNT(email) FROM users WHERE email=?"
这将为您提供包含您指定的电子邮件的实际行数。从那里,获取查询返回的唯一行的结果。如果它大于0,则可以将错误推送到错误数组。
更新后的代码如下所示:
if(strtolower(filter_var($em, FILTER_VALIDATE_EMAIL))) {
$finalCount = null;
$em = strtolower(filter_var($em, FILTER_VALIDATE_EMAIL));
$e_select = $con->prepare("SELECT COUNT(email) FROM users WHERE email=?");
$e_select->bind_param('s', $em);
$e_select->execute();
$e_select->bind_result($count);
while ($e_select->fetch()) {
$finalCount = $count;
break;
}
if(intval($finalCount) > 0) {
array_push($error_array, "Email already in use<br>");
}
}
有关详细信息:https://dev.mysql.com/doc/refman/5.7/en/counting-rows.html