我应该如何在mysql_query函数中编写PHP $ _POST变量?

时间:2015-12-01 10:20:42

标签: php mysql sql

简单的问题。如何使查询工作?我知道您无法在查询中直接使用$_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']);

这没有按计划运作。因为它仍然不起作用。

谢谢,

麦克

4 个答案:

答案 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]') . '"';