SQL EXISTS运算符永远不会返回True

时间:2018-12-10 18:33:56

标签: php sql

我有一个名为“ pwt”的SQL表,其列为“ usr”和“ pw”。 只有一个条目的值为“ admin”和“ chat”。

我通过php表单传输了2个值。现在,我应该将给定值与sql表中的两个值进行比较,如果它们都正确(“ admin”和“ chat”),则脚本应该重定向到另一个站点,否则应回显“ password errors” < / p>

我知道这不是真正的密码机制,但是它只是在虚拟机上运行,​​我只想使该机制正常工作。

这是代码:

    <?php
$servername = "localhost";
$username = "name";
$password = "password";
$dbname = "chat";

// Create connection
$conn = new mysqli($servername, $username, $password, $dbname);
// Check connection
if ($conn->connect_error) {
    die("Connection failed: " . $conn->connect_error);
}

$us1 = $_GET["user"];
$pw1 = $_GET["pswd"];

// sql for compare record
$sql = "SELECT usr, pw FROM pwt WHERE EXISTS (SELECT usr, pw FROM pwt WHERE usr = '$us1' AND pw = '$pw1')"; 



if ($conn->query($sql) === TRUE) {
    header('Location: http://192.168.56.101/testat/source/admin.php');
} else {
    echo "Falsches Passwort " . $conn->error;
    echo "Passwort ist $pw1";
    echo "Name ist $us1";
}

$conn->close();
?>

我的错误在哪里?

谢谢。

2 个答案:

答案 0 :(得分:0)

此查询功能

$conn->query($sql)

仅在查询失败(错误)时返回false。您想检查您是否真的得到结果。试试

if ($result->num_rows > 0) {
    header('Location: http://192.168.56.101/testat/source/admin.php');
} else {
    echo "Falsches Passwort " . $conn->error;
    echo "Passwort ist $pw1";
    echo "Name ist $us1";
}

除此之外,您应该直接使用此查询,因为当存在子句为true时,您应该从pwt返回每一行,即使只是一行:

$sql = "SELECT usr, pw FROM pwt WHERE usr = '$us1' AND pw = '$pw1'"; 

答案 1 :(得分:0)

我解决了这个问题

// sql for compare record
$sql = "SELECT usr, pw FROM pwt WHERE EXISTS (SELECT usr, pw FROM pwt WHERE usr = '$us1' AND pw = '$pw1')";

$result = $conn->query($sql);


if ($result->num_rows > 0) {
    header('Location: http://192.168.56.101/testat/source/admin.php');

这很好用:),谢谢大家的帮助。