2013-04-05 50 views
2

我有一个注册页面,我想确保用户名是唯一的。我已经在这里尝试了所有的解决方案,没有任何工作适合我。Php确保唯一的用户名

这是我目前得到的错误:

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); 

?> 
+0

你混合mysql和mysqli的职能,坚持一个或另一个(更好,如果它是mysqli) – rantsh 2013-04-05 19:25:28

+0

另外,部分是重复的:http://stackoverflow.com/questions/8073278/mysqli-query-expects-at-least-2-parameters – JasonMArcher 2014-12-30 18:56:15

回答

3

当你正在使用的程序的方法,您还需要通过连接手柄作为第一个论点。它应该是

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); 

但正如上面已经提到的,如果您将usernameUNIQUE你将不再需要办理入住手续都没有。您可以在INSERT之后使用mysqli_insert_id来检查记录是否已插入。如果它没有被插入,那么UNIQUE约束已经被触发。这种方式比首先检查用户名是否已经存在更有效。

+0

我仍然得到错误:警告:mysql_query()期望参数1为字符串,对象在第18行的C:\ xampp \ htdocs \ project \ projectregistered.php中。012, 可捕捉的致命错误:类mysqli_result的对象无法转换为C中的字符串:第18行的\ xampp \ htdocs \ project \ projectregistered.php – user1944305 2013-04-05 19:23:20

+0

d错误是... – Havelock 2013-04-05 19:23:46

+0

等等,我刚刚意识到你也在使用'mysql_'和'mysqli_'函数...更好地坚持'mysqli_'。 – Havelock 2013-04-05 19:24:47

1

使得username列的唯一在你的MySQL表是实现这一

CREATE UNIQUE INDEX uname_uniq ON projectuser (username); 

这将防止两行具有相同的用户名,最简单的方法INSERTUPDATE

MySQL Reference

+0

我知道,但我想尝试通过PHP首先实现它 – user1944305 2013-04-05 19:29:24

+0

@ user1944305然后你的代码看起来是正确的整体,但你需要修复MySQL/mysqli混合你有。修复这个问题,测试它并重新发布代码,如果它仍然不起作用 – rantsh 2013-04-05 19:37:56

1

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

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

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

为了确保用户名是唯一的,只是一个唯一索引添加到列...(并检查是否$ CON组>错误设置)