[英]Mysql query IFEXIST does not return any result
我正在嘗試在PHP中創建一個登錄表單。 我正在傳遞用戶輸入的用戶名和密碼,並檢查數據庫中存在的天氣。
我已經完成了編碼,但是IF EXIST查詢未返回任何結果。
誰能幫我解決這個問題。 或給我一個替代主意..謝謝...
<?php
$name= $_POST["usname"];
$pass = $_POST ["password"];
$connection = mysqli_connect("localhost","sathya","sathya","learning1");
//mysqli_query($connection,"INSERT INTO user (name, password) VALUES ('".$name."', '".$pass."')");
$result = mysqli_query($connection, "IF EXISTS(SELECT * FROM user WHERE name='".$name."'AND password='".$pass."')");
mysqli_close($connection);
echo "result ".$result;
if($result == True){
header("Location: logedin.php");
//redirect_to('logedin.php');
}else{
echo "not logged in installed";
}
?>
這是一個較晚的答案,但是您需要注意一些事項。 (不排除已接受的答案)。
您將需要使用if(mysqli_num_rows($result) > 0)
因為如果用戶名匹配且密碼不匹配,則查詢將始終為TRUE,反之亦然。
您最好使用mysqli_num_rows()
而不是使用if($result == True)
旁注:請查閱我的有關密碼存儲和SQL注入的腳注。
<?php
$DB_HOST = "xxx";
$DB_NAME = "xxx";
$DB_PASS = "xxx";
$DB_USER = "xxx";
$db = new mysqli($DB_HOST, $DB_USER, $DB_PASS, $DB_NAME);
if($db->connect_errno > 0) {
die('Connection failed [' . $db->connect_error . ']');
}
$name = $_POST["usname"]; // See footnotes about this
$pass = $_POST ["password"]; // See footnotes about this
$result = mysqli_query($db, "SELECT EXISTS(SELECT * FROM users WHERE username='".$name."' AND password='".$pass."')");
// Works just as well
// $result = mysqli_query($db, "SELECT * FROM users WHERE username='".$name."' AND password='".$pass."'");
if(mysqli_num_rows($result) > 0){
echo "Both match.";
}
else{
echo "Sorry, there was not a perfect match.";
}
腳注:
您還可以使用:
$result = mysqli_query($db, "SELECT * FROM users WHERE username='".$name."' AND password='".$pass."'");
對於使用較少字符的SELECT EXISTS(SELECT *
或選擇實際列:
$result = mysqli_query($db, "SELECT username, password FROM users WHERE username='".$name."' AND password='".$pass."'");
我建議您使用准備好的語句並清理輸入內容。 不這樣做將使您易於進行SQL注入 。
這是一些有關(mysqli)准備好的語句的教程,您可以研究和嘗試:
以下是有關PDO的一些教程:
密碼
我還注意到您以純文本形式存儲密碼。 不建議這樣做。
使用以下之一:
crypt()
bcrypt()
scrypt()
password_hash()
函數。 其他連結:
關於PHP部分,我什么也沒說,但是查詢肯定會導致語法錯誤。
IF whatever ...
僅在存儲過程或函數中允許,而在單個查詢中則不允許。 但是,您可以將IF
替換為SELECT
類的
$result = mysqli_query($connection, "SELECT EXISTS(SELECT * FROM user WHERE name='".$name."'AND password='".$pass."')");
該查詢將返回0(如果不存在任何條目)或1(如果存在一個條目)。 使用EXISTS
也是一個好主意,因為它會在找到條目后立即停止查詢,並且不會返回整個數據集。
您可以在使用“ IF EXISTS”功能的同時嘗試以下操作-
$result = mysqli_query($connection, "SELECT * FROM user WHERE name='".$name."'AND password='".$pass."'");
$count=mysql_num_rows($result);
if($count==1) // $count=1 if any row is present with mathing username and pwd in db
{
echo "user already logged in";
}
else
{
echo "user not exist";
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.