上一主题下一主题
关键字
主题 : 对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的一个项目】 `3OGCy  
有一个用户,用户名是admin,密码是admin。 G9i#_  
查询语句是: V OX>Sl  
Nt'5}  
$sql="select * from table_project where a_username='{$username}' and a_password='{$password}';"; YU`{  
然后查询: b-Hn=e_  
' 4"L;){:L  
$res=mysql_query($sql); x:xQXjJ  
……省略 7^L&YV W  
因为防止sql注入,所以想在sql语句查询之前都进行一下转义,所以用addslashes对$sql语句转义了一下,但是就出错了。 1K`A.J:Uy  
-FI1$  
$sql=addslashes($sql); 87Kx7CKF"  
$res=mysql_query($sql); GyCpGP|AZ  
在没有加转义的那一行代码前,用admin,admin可以顺利登录。 ,Tx8^|b#F  
加了之后,用admin,admin登录后,捕捉了如下错误,请教大牛们怎么破? 9Dl \SF[  
U]acm\^Z  
错误编号:1064 .EdV36$n  
错误内容: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 :wZZ 1qa  
多谢!
此帖悬赏结束
最佳答案: 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也行。 cv]BV>=E  
O:._W<  
$db = new PDO('mysql:host=127.0.0.1;dbname=test;charset=utf8','root','rootpass'); \ADLMj`F|  
$stm = $db->prepare("select * from test where field = :value"); AX;c}0g  
$stm->bindValue(':value',$_GET['field'],PDO::PARAM_STR); O5M2`6|As  
$stm->execute(); x}|+sS,g  
\sITwPA[z  
$rows = $stm->fetchAll(PDO::FETCH_ASSOC); t0.;nv@A0  
var_dump($rows); }vY.EEy!  
再不济mysqli也可以。 8ljuc5,J  
AuXs B  
$db = new mysqli('127.0.0.1','root','rootpass','database_name'); Mb.4J2F?  
$stmt = $db->prepare("select * from test where field = ?"); o,*=$/or  
$stmt->bind_param('s',$_GET['field']); |mOMRP#'  
$stmt->execute(); ceG&,a$\  
$rows = array(); :3O5ET'1  
while ($row = $stmt->fetch()) array_push($rows,$row); b]i>Bv  
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 注入。 QUU;g2k  
------ 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有现成的转义方法