如何从SQL注入保护MySQL?

可能重复:
防止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();

请建议。


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

另外看看关于选择API的手册页,其中指出:

建议使用mysqliPDO_MySQL扩展。 不建议在新的开发中使用旧的mysql扩展。


这真的取决于你如何得到你的变量。

最好和最安全的方法是使用预先准备的语句。 你可以用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();
?>

这个想法是你准备的语句 - 它告诉数据库它应该期待什么,然后你在执行语句中用数组传递参数给它。 任何有趣的事情都是从等式中取出来的。


将所有值替换为占位符,并在发送之前准备好该语句。 例如与PDO。

链接地址: http://www.djcxy.com/p/93979.html

上一篇: How to secure MySQL from SQL Injection?

下一篇: pdo and hash to prevent sql injection