MySQL查询未获取结果(PHP)

MySQL查询未获取结果(PHP),php,mysql,web,Php,Mysql,Web,我有一个SQL问题,这是不工作的以下脚本 <?php $servername = "localhost"; $username = "root"; $password = "root"; $dbname = "Freepaste"; $conn = mysqli_connect($servername, $username, $password,$dbname); if (!$conn) { die("Connection failed: " . mysqli_conne

我有一个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中的名称,它们也是正确的。我错过了什么

以下是指向HTML的链接:

您缺少引用(尽管您说您已经尝试过),我认为它应该有效。您的查询应该是:

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

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

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

您的查询需要如下所示

$sql = "SELECT * FROM users where users.username=\"$user\" AND users.password=\"$pass\"";
帮自己一个大忙,打电话到
mysqli\u query()
之后。这些会告诉你mysql到底在哭什么


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

对于您的示例,您只需要在查询中的$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();

有关更多信息,请参见确保您的数据库密码为“root”?如果是,则跟随查询字符串

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

把它换掉。我认为它可以很好地工作:)

我已经准备好了这个声明,只是为了更好的可读性而省略了它。单引号也不行。对不起,我冒犯了你。我理解了我的错误,并发布了全部代码。拜托,我是新手,但不是骗子。我想说的是,我知道单引号应该有效,但事实并非如此。那种让生活变得困难的错误。@goelakash那么,我想你不明白什么是事先准备好的陈述,因为你的问题中仍然没有一个。检查我给出的答案中的链接。是的,我看到了,并替换了代码的那部分。表单可以获取$user和$pass,但查询不起作用。它在phpMyAdmin中工作,因此没有问题。错误是PHP。发布了整个代码。任何帮助都将不胜感激。