Php确保唯一的用户名

时间:2013-04-05 19:17:29

标签: php mysql mysqli username

我有一个注册页面,我想确保用户名是唯一的。我已经在这里尝试了所有的解决方案,没有什么对我有用。

这是我目前得到的错误:

Warning:  mysqli_query() expects at least 2 parameters, 1 given 
in C:\xampp\htdocs\project\projectregistered.php on line 16
Query was empty

这是我的php:

 <?php
 $con=mysqli_connect("localhost","root","","test");
 // Check connection
 if (mysqli_connect_errno()) {
     echo "Failed to connect to MySQL: " . mysqli_connect_error();
 }

$username = $_POST['username'];  

echo $username;

$query = mysqli_query("SELECT * FROM projectuser WHERE username='$username'");

$result1 = mysql_query($query) or die (mysql_error().$query);    
$count = mysql_num_rows($result1);

if ($count>0) {
echo 'Sorry! This Username already exists!';
} else {
    $surname = $_POST['surname'];
    $sql = "INSERT INTO projectuser (firstname, surname, username, password, location)
            VALUES
            ('$_POST[firstname]', '".mysql_real_escape_string($surname)."', '$_POST[username]', '$_POST[password]', '$_POST[location]')";
}

if (!mysqli_query($con,$sql)) {
    die('Error: ' . mysqli_error($con));
}
echo "1 record added ".$sql;

mysqli_close($con);

?>

3 个答案:

答案 0 :(得分:4)

当您使用过程方法时,您还需要将连接句柄作为第一个参数传递。它应该是

mysqli_query($con, "SELECT * FROM projectuser WHERE username='$username'");

此外,在数据库表username中创建UNIQUE列。

<强>更新
我刚刚意识到你正在使用mysql_mysqli_函数。更好地坚持第二个。所以你的代码是:

$query = "SELECT * FROM projectuser WHERE username='$username'";
$result = mysqli_query($con, $query);
$count = mysqli_num_rows($result);

但如上所述,如果您将username列设为UNIQUE,则根本不需要检查。您可以在INSERT之后使用mysqli_insert_id来检查是否已插入记录。如果尚未插入,则UNIQUE约束已被触发。这种方式比SELECT首先检查用户名是否已经存在更有效。

答案 1 :(得分:1)

在MySQL表中使username列唯一是实现此目的的最简单方法

CREATE UNIQUE INDEX uname_uniq ON projectuser (username);

这会阻止在INSERTUPDATE

上使用相同用户名的2行

MySQL Reference

答案 2 :(得分:1)

大多数mysqli_ *函数都期望将mysqli-instance作为第一个参数。

或者你可以使用$ con&gt; function()而不需要额外的参数。

p.s。:不要混用mysqli和mysql。

要确保用户名是唯一的,只需在列中添加唯一索引...(并检查是否设置了$ con&gt;错误)