MySQL 查询未获取结果 (PHP)

MySQL query not fetching results (PHP)

我的以下脚本有一个 SQL 问题,但无法正常工作。

    <?php
$servername = "localhost";
$username = "root";
$password = "root";
$dbname = "Freepaste";
$conn = mysqli_connect($servername, $username, $password,$dbname);

if (!$conn) {
    die("Connection failed: " . mysqli_connect_error());
}
echo "Connected successfully";
$user = $_POST['user'];
$pass = $_POST['pass'];

echo $user."  ".$pass;

$stmt = $conn->prepare("SELECT * FROM users where users.username= ? AND users.password = ?");
$stmt->bind_param('ss', $user, $pass);
$stmt->execute();
$result = $stmt->get_result();
printf("Errormessage: %s\n", $mysqli->error);;

if (mysqli_num_rows($result) > 0) {
    // output data of each row
    while($row = mysqli_fetch_assoc($result)) {
        echo "<br>id: " . $row["username"]." Password ".$row["password"]. "<br>";
    }
} 
else {
    echo "<br>0 results <br>";
    printf("Errormessage: %s\n", $mysqli->error);
}

mysqli_close($conn);
?>

没有 "where" 子句的语句得到了所有结果,所以我知道密钥是正确的。另外,我 运行 MySQL 中的查询并且它工作正常。我尝试将 """ 添加到 $user$pass,但仍然无法正常工作。我检查了 HTML 中的名称,它们也是正确的。我错过了什么?

这是 link 到 HTML: http://pastebin.com/CWLuafVq

你漏掉了引号(虽然你说你试过了)我认为它应该有效。您的查询应该是:

SELECT * FROM users where users.username='$user' AND users.password='$pass'

您的查询容易受到 SQL 注入的攻击,为了避免这种情况(并避免像在 SQL 语句中需要引号这样的麻烦),您应该使用 PreparedStatement。

就目前而言,当您的变量被放入 sql 查询中时,它最终看起来像这样 WHERE users.username=goelakash AN...。如果用户名和密码没有引号,mysql 会认为您在比较两列。

您的查询需要如下所示。

$sql = "SELECT * FROM users where users.username=\"$user\" AND users.password=\"$pass\"";

帮自己一个大忙,然后 put mysqli_error() calls 在您致电 mysqli_query() 之后。这些会告诉你 mysql 到底在哭什么。

还值得注意的是,您的查询对 sql 注入开放,您应该查看 prepared statements 以缓解这种情况。

对于您的示例,您只需在查询中将 $user 和 $pass 放在单引号中。

但是!!!!!!您的查询对 SQL 注入开放。您应该更改编写查询的方式。而是使用绑定参数,那么你几乎可以忘记这个问题。

示例:

$stmt = $conn->prepare("SELECT * FROM users where users.username= ? AND users.password = ?");
$stmt->bind_param('ss', $user, $pass);
$stmt->execute();
$result = $stmt->get_result();

有关详细信息,请参阅 here

确保您的数据库密码是 'root'?如果是,则按照查询字符串

$sql = "SELECT * FROM users WHERE users.username='$user' AND users.password='$pass'";

只是替换它。我认为它会很好:)