我有一种情况,我必须检查数据库中是否存在用户,我试试这个:
$username = htmlspecialchars($_POST['userName']);
/* Check if username is free*/
if(!isset($error_message)) {
if(!isset($_POST["userName"])) {
$error_message = " All Fields are required";
} else {
$db_handle = new mysqli("localhost", "root", "pass", "database");
$query = 'SELECT * FROM naudotojai WHERE username = "$username"';
$result = $db_handle->query($query);
if($result->num_rows == 0) {
$error_message = "Do not exist";
}
}
}
但它没有用。即使我输入数据库中存在的有效用户名,它也总是返回0行。
mysqli_result Object ( [current_field] => 0 [field_count] => 7 [lengths] => [num_rows] => 0 [type] => 0 )
然后我有第二个脚本,在那里我检查用户名是否是免费的,这很好用:
$username = htmlspecialchars($_POST['userName']);
/* Check ir username is free*/
if(!isset($error_message)) {
if(!isset($_POST["userName"])) {
$error_message = " All Fields are required";
} else {
$db_handle = new mysqli("localhost", "root", "pass", "database");
$query = 'SELECT * FROM naudotojai where username = "$username"';
$result = $db_handle->query($query);
if(!empty($result)) {
$error_message = "Exists";
}
}
}
你可以帮我解决这个问题吗?我不能自己搞清楚。
编辑:当我手动输入用户名时,它工作正常。所以问题在于查询中的变量。但是我没有得到它。为什么它适用于一个查询但不适用于另一个...
$query = 'SELECT * FROM naudotojai WHERE username = admin';
答案 0 :(得分:0)
您使用单引号字符串来构建查询,因此不会替换字符串$ username。
尝试使用
"SELECT * FROM naudotojai where username = '$username'"
但更好的方法是使用预准备语句来避免SQL注入。
答案 1 :(得分:0)
您可以将PDO与PHP一起使用。
}else{
$dbh = new PDO('mysql:host=localhost;dbname=database', "root", "pass");
$sth = $dbh->prepare("SELECT * FROM naudotojai where username = :username");
$sth->execute(":username" => $username);
$result = $sth->fetchAll(PDO::FETCH_ASSOC);
if($result){
// do something
}
}