【问题标题】:Mysql Query not returning my results [duplicate]Mysql Query没有返回我的结果[重复]
【发布时间】:2017-10-24 09:05:43
【问题描述】:

如果我用查询运行它

"SELECT * FROM users"; 

它返回我的结果。但是一旦我运行这个

$username = $_POST['username'];
$password = $_POST['password'];

$login = "SELECT * FROM users WHERE name= ".$username." AND password= ".$password."";

没有。

如果我在没有变量的情况下在 Mysql 工作台中运行它。如果我运行 echo $_POST 值,它们会正确通过。 我对自己做错了什么感到困惑,请!帮我。 我还通过https://phpcodechecker.com/ 运行了我的代码,它在我的代码中看不到任何错误。 这是完整的功能。

function login($username,$password){
global $db_conn;
$conn = new mysqli($db_conn['servername'], $db_conn['username'], $db_conn['password'], $db_conn['dbname']);
$username = $_POST['username'];
$password = $_POST['password'];

$login = "SELECT * FROM users WHERE name= ".$username." AND password= ".$password."";
    $login_result = $conn->query($login);

    if ($login_result->num_rows > 0) {

        $output = array();
        while($row = $login_result->fetch_assoc()) {
            $output[] = $row;
            echo "".$row['name']."-".$row['password']."<br>";
        }
        } else {
            echo "Invaild Login Details!"."<br>" ;
            $conn->close();
            return false;
        }
}

每次显示“无效的登录详细信息!”但我知道他们是返回的一个结果。

我做错了什么?

【问题讨论】:

  • $login = "SELECT * FROM users WHERE name= '".$username."' AND password= '".$password."'";如何为变量添加单引号
  • 让我现在快点试试吧:D 会马上回复你的。
  • 什么是 echo $login;返回? pw 是否包含 sql 特定字符?
  • 注意这些sql查询是good candidates to sql injection risk,你应该使用prepared statements
  • 为什么会导致它不回显?

标签: php mysql


【解决方案1】:

像这样更改查询

$login = "SELECT * FROM users WHERE name= '$username' AND password= '$password'";

注意:这种方法容易受到sql注入攻击。尝试准备好的语句来避免它

【讨论】:

    【解决方案2】:

    尝试使用''(single quote) 比较name and password

    "SELECT * FROM users WHERE name= '".$username."' AND password= '".$password."'";
    

    【讨论】:

    • 这个查询有什么问题
    • 这个查询没有问题。可能是他不知道如何用正确的 php 语法编写代码。
    【解决方案3】:
    $login = "SELECT * FROM users WHERE name = '{$username}' AND password = 
    '{$password}' ";
    

    【讨论】:

    • 添加一个关于您的代码功能的简短说明会很有用。
    【解决方案4】:

    你可以简单地指定变量而不需要去字符串追加在php中构造查询

    例如:

    Query = "SELECT * FROM `users` where username = '$username' AND  password = '$password' " ;
    

    【讨论】:

      【解决方案5】:

      试试下面的代码

      $login = "SELECT * FROM users WHERE name= '".$username."' AND password= '".$password."'";
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2014-02-12
        • 2013-11-28
        • 1970-01-01
        • 2017-05-16
        • 2015-06-26
        • 1970-01-01
        相关资源
        最近更新 更多