-2

可能重复:
在 PHP 中防止 SQL 注入的最佳方法

这是我的 SQL 查询,我想让它没有 SQL 注入

 $q1="insert into ecat_user(login_id,password,fullname,gender,disp_name,dob,";
 $q1.="street_addr,city,country,zip,email,aol,msn,icq,yahoo,homepg_link,homepg_caption,description,";
 $q1.="legal_guardian,phoneno,promotioncode,user_type,height,weight,chest,waist,inseam,eyecolor,haircolor,";
 $q1.="shoesize,biceps,collar,experience,travel,notes,added_on,updated_on) values('$modelName','$password','$firstName',";
 $q1.="'$gender','$description','$dob','$streetAddress','$city','$country','$zipCode','$emailAddress',";
 $q1.="'$aolID','$msnID','$icqID','$msnID','$homePage','$homePageCaption','$description','$legalGuardian',";
 $q1.="'$phoneNumber','$promotionalCode','','','','','','','','','','','','','','','','')";
 mysql_query($q1, $Conn);
 $id = mysql_insert_id();

请建议。

4

4 回答 4

6

停止使用古老的、即将被弃用的mysql_*函数,并开始使用PDO。查看文档PDO::prepare()以查看示例。

另请查看有关选择 API的手册页,其中指出:

建议使用mysqliPDO_MySQL扩展名。不建议使用旧的mysql扩展进行新的开发。

于 2012-08-23T12:19:51.873 回答
0

您有两个选择 - 转义 unsafe_variable 中的特殊字符,或使用参数化查询。两者都可以保护您免受 SQL 注入。参数化查询被认为是更好的做法,但在变量中转义字符将需要较少的更改。

这在上面的文章中有明确的描述和清除,请完整阅读。

如何防止 PHP 中的 SQL 注入?

于 2012-08-23T12:23:26.263 回答
0

这实际上取决于您如何获取变量。

最好和最安全的方法是使用准备好的语句。您可以使用语句来执行这些操作mysql_*,但再次使用 PDO 可能是更好的选择。

这是在 PDO 中使用准备好的语句的示例:

<?php
/* Execute a prepared statement by passing an array of values */
$sql = 'SELECT name, colour, calories
    FROM fruit
    WHERE calories < :calories AND colour = :colour';
$sth = $dbh->prepare($sql, array(PDO::ATTR_CURSOR => PDO::CURSOR_FWDONLY));
$sth->execute(array(':calories' => 150, ':colour' => 'red'));
$red = $sth->fetchAll();
$sth->execute(array(':calories' => 175, ':colour' => 'yellow'));
$yellow = $sth->fetchAll();
?>

这个想法是您准备语句 - 告诉数据库它应该期望什么,然后在执行语句期间将参数与数组一起传递给它。任何有趣的事情都会被排除在等式之外。

于 2012-08-23T12:20:09.287 回答
0

用占位符替换所有值并在发送前准备好语句。以 PDO 为例。

于 2012-08-23T12:20:38.487 回答