我想检查数据库中是否已存在用户名,并且我编写了此代码
<?php
include('connect.php');
if(isset($_POST['registrati'])) {
$Username = $_POST['nickname'];
$Password = md5($_POST['password']);
$Escape = mysql_real_escape_string($Username);
$Query2 = "SELECT * FROM utenti WHERE utenti='".$Username."'";
if(mysql_num_rows($Query2)>0) {
echo "Nome utente già in uso";
}
else {
$Query = "INSERT INTO sito(usenti, password) VALUES('$Escape', '$Password')";
$Esecuzione = mysql_query($Query);
}
if(!$Esecuzione) {
echo "Errore: ".mysql_error();
}
else {
echo "";
}}
?>
当我运行它时,即使我输入相同的两个用户名,也没有说什么,并将它们放在一起。为什么呢?
答案 0 :(得分:0)
在检查返回的行数mysql_num_rows()
之前,您需要执行查询。
$result_set = mysql_query($Query2)
if(mysql_num_rows($result_set) > 0) {
//continue
}
Sidenote:从PHP 5.5开始,不推荐使用MySQL_*
。请改用MySQLi_*
或PDO
。
答案 1 :(得分:0)
您需要一个结果作为mysql_num_rows的参数。
所以,
$Query2 = mysql_query("SELECT * FROM utenti WHERE utenti='$Username'");
而不仅仅是字符串
$Query2 = "SELECT * FROM utenti WHERE utenti='$Username'";
应该修复它。
请注意,如果使用双引号,则不需要连接字符串。
另外,我强烈建议您停止使用mysql_ *函数,因为它们已被弃用并切换到mysqli_ *或PDO。见the red box。并且不要忘记始终清理用户输入(或使用预准备语句),因为否则您将接受SQL注入。
答案 2 :(得分:0)
在mysql_num_rows($Query2)
$result = mysql_query("SELECT * FROM utenti WHERE utenti='".$Username."'")
if (mysql_num_rows($result) > 0) {//code)
答案 3 :(得分:0)
你错过了
mysql_query($Query2)
之前如果条件。
您应该尝试使用PHP数据对象(PDO)连接到数据库并避免使用mysql扩展。 mysql_ functions在php 5.5.0版本中已弃用,将来会被删除。
答案 4 :(得分:0)
usenti
的{{1}}列,但会从表格sito
中检索utenti
。我认为这是一个错字。utenti
存储用户名,您应该使用相同的内容进行检索。$Escape
才能执行实际查询,然后才能检查行数。尝试以下修复:
mysql_query($Query2)