上一主题下一主题
关键字
主题 : 对sql查询语句加转义addslashes后,语句语法出现问题
级别: 北风技术菜鸟

UID: 470404
精华: 0
发帖: 288
威望: 1384 点
学点: 710 点
贡献: 0 点
好评: 0 点
学币: 0 个
注册时间: 2014-06-27
最后登录: 2015-03-29
楼主  发表于: 2015-03-18 12:27||

对sql查询语句加转义addslashes后,语句语法出现问题

【php+mysql的一个项目】 )<bgZ, v  
有一个用户,用户名是admin,密码是admin。 A*jU &3#  
查询语句是: -xS{{"-  
ES[H^}|Gi  
$sql="select * from table_project where a_username='{$username}' and a_password='{$password}';"; FS7 _ldD  
然后查询: `iYiAc  
]z Ea tY  
$res=mysql_query($sql); _KBN  
……省略 vt@5Hb)  
因为防止sql注入,所以想在sql语句查询之前都进行一下转义,所以用addslashes对$sql语句转义了一下,但是就出错了。 E|OB9BOS  
FES_:?.0  
$sql=addslashes($sql); k%|7H,7  
$res=mysql_query($sql); ~u-DuOZ8  
在没有加转义的那一行代码前,用admin,admin可以顺利登录。 (_h<<`@B  
加了之后,用admin,admin登录后,捕捉了如下错误,请教大牛们怎么破? jC3ta  
n qSjP5  
错误编号:1064 u;f${Wn'3  
错误内容:You h****e an error in your SQL syntax;check the manual that corresponds to your MySQL server version for the right syntax to use near '\'admin\' and a_password=\'21232f297a57a5a743894a0e4a801fc3\'' at line 1 fgrflW$  
多谢!
此帖悬赏结束
最佳答案: 2 学点
最佳答案获得者: dhx840828284
级别: 北风资深评论员


UID: 470398
精华: 0
发帖: 3024
威望: 3862 点
学点: 8642 点
贡献: 90 点
好评: 0 点
学币: 112 个
注册时间: 2014-06-27
最后登录: 2015-04-07
沙发(1楼)  发表于: 2015-03-18 12:28||

少年,PDO才是王道.mysqli也行。 [@_zsz,`L  
?-e'gC  
$db = new PDO('mysql:host=127.0.0.1;dbname=test;charset=utf8','root','rootpass'); yv!,iK9  
$stm = $db->prepare("select * from test where field = :value"); D(]])4  
$stm->bindValue(':value',$_GET['field'],PDO::PARAM_STR); $K,6!FyBa  
$stm->execute(); Kb#}f/  
Bi +a)_K  
$rows = $stm->fetchAll(PDO::FETCH_ASSOC); NNQro)Lpe  
var_dump($rows); w]{NaNIeq1  
再不济mysqli也可以。 TZ7{cekQ  
Q(}TN,N  
$db = new mysqli('127.0.0.1','root','rootpass','database_name'); s)e; c<(/  
$stmt = $db->prepare("select * from test where field = ?"); oR=^NEJv  
$stmt->bind_param('s',$_GET['field']); &!3=eVg  
$stmt->execute(); V+()`>44  
$rows = array(); QPH2TXw  
while ($row = $stmt->fetch()) array_push($rows,$row); !S/hH%C  
var_dump($rows);
最佳答案奖励: (+2) 学点
级别: 北风资深工程师

UID: 472685
精华: 0
发帖: 1930
威望: 1946 点
学点: 3280 点
贡献: 0 点
好评: 0 点
学币: 0 个
注册时间: 2014-07-10
最后登录: 2015-04-08
板凳(2楼)  发表于: 2015-03-18 12:28||

如果应用程序只使用预****语句,可以确保不会发生SQL 注入。 l]R0r{{  
------ php 手册 预****语句
热心助人奖励: (+1) 学点
级别: 北风资深工程师

UID: 472681
精华: 0
发帖: 1791
威望: 1815 点
学点: 2095 点
贡献: 0 点
好评: 0 点
学币: 0 个
注册时间: 2014-07-10
最后登录: 2015-04-07
地板(3楼)  发表于: 2015-03-18 12:28||

放弃mysql_query的写法吧,用pdo,另外建议不要使用addslashes,mysqli或者pdo有现成的转义方法