简单的问题。如何使查询工作?我知道您无法在查询中直接使用$_POST
。但我不知道如何让它发挥作用。
$sql = 'SELECT * FROM users WHERE `password` = $_POST[password] AND `username` = $_POST[username]';
$result = mysqli_query($link, $sql);
if (!$result) {
echo "DB Error, could not query the database\n";
echo 'MySQL Error: ' . mysqli_error($link);
exit;
我也尝试过像这样使用mysqli_real_escape_string:
$username_sql = mysqli_real_escape_string($link, $_POST['username']);
$password_sql = mysqli_real_escape_string($link, $_POST['password']);
这没有按计划运作。因为它仍然不起作用。
谢谢,
麦克
答案 0 :(得分:5)
使用''
与MySQL的字符串比较
$username_sql = mysqli_real_escape_string($link, $_POST['username']);
$password_sql = mysqli_real_escape_string($link, $_POST['password']);
$sql = "SELECT * FROM users
WHERE `password` = '$username_sql' AND `username` = '$password_sql'";
答案 1 :(得分:4)
使用预准备语句以避免使用逗号进行sql注入和语法错误。
$sql = 'SELECT * FROM users WHERE `password` = ? AND `username` = ?';
$stmt = mysqli_stmt_init($link);
mysqli_stmt_prepare($stmt, $sql);
mysqli_stmt_bind_param($stmt, "ss", $_POST['password'], $_POST['username']);
mysqli_stmt_execute($stmt);
$result = mysqli_stmt_get_result($stmt);
while($row = mysqli_fetch_assoc($result){
echo $row['username'] .'<br>';
}
答案 2 :(得分:4)
我认为有必要添加至少一个预准备语句的示例,只是为了表明它并不困难,它使您的应用程序更安全(SQL注入)。
$stmt = $mysqli->prepare('SELECT * FROM users WHERE `password` = ? AND `username` = ?');
$stmt->bind_param("ss", $_POST[password], $_POST[username]);
$stmt->execute();
$stmt->bind_result($result);
$stmt->fetch();
// read the result...
$stmt->close();
请注意,密码不应存储为纯文本,而应使用password_hash()和password_verify()函数。
答案 3 :(得分:0)
你自己回答了你的问题。 mysqli_real_escape_string()是要走的路。
$sql = 'SELECT * FROM users WHERE `password` = "' . mysqli_real_escape_string($_POST[password]) . '" AND `username` = "' . mysqli_real_escape_string($_POST[username]') . '"';