繁体   English   中英

MySQL查询IFEXIST不返回任何结果

[英]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的一些教程:


密码

我还注意到您以纯文本形式存储密码。 不建议这样做。

使用以下之一:

其他连结:

关于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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM