我有一个注册页面,我想确保用户名是唯一的。我已经在这里尝试了所有的解决方案,没有什么对我有用。
这是我目前得到的错误:
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 :(得分: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);
这会阻止在INSERT
或UPDATE
答案 2 :(得分:1)
大多数mysqli_ *函数都期望将mysqli-instance作为第一个参数。
或者你可以使用$ con&gt; function()而不需要额外的参数。
p.s。:不要混用mysqli和mysql。
要确保用户名是唯一的,只需在列中添加唯一索引...(并检查是否设置了$ con&gt;错误)