2016-06-10 51 views
0

在SQL查询中使用变量的正确格式是什么?是的,我知道我的代码是不安全的,因为它没有散列和其他缺陷,但我不能让它工作。如何在PHP中安全地正确使用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! 

Fatal error: Uncaught Error: Call to undefined function mysql_real_escape_string() in C:\xampp\htdocs\hashing\password.php:3 Stack trace: #0 {main} thrown in C:\xampp\htdocs\hashing\password.php on line 3

它只是一个简单的PHP形式的帖子下面的PHP脚本。我还得到了phpMyAdmin中格式化的SQL查询。谢谢!

+0

PHP安装可能只是没有附带'mysql *'扩展名,因为它已被弃用。你可能已经安装了'mysqli *'。 'mysql_real_escape_string()'=>'mysqli_real_escape_string()'。虽然这不会有助于安全问题。 – HPierce

+0

不_尝试手动转义值。相反,请阅读使用“准备好的语句”和“参数绑定”结合使用的优点。 _这全部记录在案。阅读文档!_ – arkascha

+0

如果您使用的是PHP 7,那么'mysql_ *'函数将不再可用。我假设你的'database.php'使用'mysqli_ *'函数,对吧? – MonkeyZeus

回答

-1

你的XAMPP必须配备的MySQLi而不是MySQL的(现在已废弃),所以你必须使用mysqli_real_escape_string($var)代替mysql_real_escape_string($var)

你也需要逃避每个变量,你会把你的SQL查询,包括它:)! (在你的SQL查询不管你是使用没有解释$密码单引号),它更像是:

$sql = 'INSERT INTO登录( ID ,用户名,密码,问题) VALUES (NULL, \'test\', \''.$password.'\', \'test\')';

+0

已弃用PHP 5.5.0。现在它被完全删除。 – MonkeyZeus

+0

我们不知道他使用的是哪个版本的PHP,但是现在它被删除了,你是对的:) – Julqas

+0

我已经完成了以下操作并更新了mysqli语句的mysql_real函数,现在我得到了这个错误? 警告:mysqli_real_escape_string()需要第3行中的C:\ xampp \ htdocs \ hashing \ password.php中给出的恰好2个参数 编号 – 99Con