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'";
只是替换它。我认为它会很好:)
我的以下脚本有一个 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'";
只是替换它。我认为它会很好:)