MySQL查询没有获取结果(PHP)

时间:2015-03-08 07:26:59

标签: 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_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的链接: http://pastebin.com/CWLuafVq

4 个答案:

答案 0 :(得分:1)

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

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

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

答案 1 :(得分:1)

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

您的查询需要看起来像这样。

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

在致电mysqli_query()后,请帮助自己,put mysqli_error() calls。这些将告诉你mysql正在哭什么。

值得注意的是,您的查询对sql注入是开放的,您应该查看prepared statements来缓解这一点。

答案 2 :(得分:1)

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

BUT !!!!!!您的查询对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

答案 3 :(得分:1)

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

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

只需更换它。我认为它会正常工作:)

相关问题