如何在PHP中安全地正确使用SQL查询中的变量?

时间:2016-06-10 17:39:01

标签: php mysql

在SQL查询中使用变量的正确格式是什么?是的我知道我的代码不安全,因为它没有哈希和其他缺陷,但我无法让它工作。

include 'config/database.php'; // DB connection.
$password = mysql_real_escape_string($_POST['password']);
$sql = 'INSERT INTO `login` (`id`, `username`, `password`, `question`) VALUES (NULL, \'test\', \$password\, \'test\')';

if (mysqli_query($con, $sql))
{
echo 'Done!';
}

else
{
echo 'No.';
}

mysqli_close($con);

错误

Connection worked!
  

致命错误:未捕获错误:在C:\ xampp \ htdocs \ hashing \ password.php中调用未定义函数mysql_real_escape_string():3堆栈跟踪:在C:\ xampp \ htdocs \ hashing \中抛出#0 {main}第3行的password.php

它只是一个简单的PHP表单,发布到以下PHP脚本。我还得到了phpMyAdmin中格式化的SQL查询。谢谢!

1 个答案:

答案 0 :(得分:-1)

您的xampp必须附带MySQLi而不是MySQL(现已弃用),因此您必须使用mysqli_real_escape_string($var)代替mysql_real_escape_string($var)

此外,您必须转义将放入SQL查询中的每个变量,并将其包括在内:)! (关注你的SQL查询,你使用的单引号不解释$ password),它更像是:

$sql = 'INSERT INTO登录( ID为,的用户名, {密码{1}} {问题{1}}