Heim  >  Artikel  >  Backend-Entwicklung  >  这段代码为什么能查询出_id = 1001的用户信息?

这段代码为什么能查询出_id = 1001的用户信息?

WBOY
WBOYOriginal
2016-06-20 12:31:031268Durchsuche

<?phptry {	$db = new PDO("mysql:host=localhost;dbname=mtest;charset=utf8", 'root', 'root');	$db -> setAttribute(PDO::ATTR_EMULATE_PREPARES, false);	$stmt = $db -> prepare("select * from zhuru where _id=:usid ");	$usid = '1001 and 1=0';	$stmt->bindParam(':usid',$usid,PDO::PARAM_INT);	$exer = $stmt -> execute();	while ($rows = $stmt -> fetch(PDO::FETCH_ASSOC)) {		echo $rows['username'].'------' . $rows['nickname'].'<br><br>';	}	$db = null;} catch(PDOException $e) {	echo $e -> getMessage();}


这段代码为什么能查询出_id = 1001的用户信息?


回复讨论(解决方案)

select * from zhuru where _id=:usid 
实际执行的是
select * from zhuru where _id='1001 and 1=0'
不可能满足条件

退一步说,即便不给你加上单引号,执行的也是
select * from zhuru where _id=1001 and 1=0
1=0 恒为假,表达式不会成立,自然也就找不到

问题是查询到了_id=1001的用户的信息。

select * from zhuru where _id=:usid 
实际执行的是
select * from zhuru where _id='1001 and 1=0'
不可能满足条件

退一步说,即便不给你加上单引号,执行的也是
select * from zhuru where _id=1001 and 1=0
1=0 恒为假,表达式不会成立,自然也就找不到


执行的时候查询到了_id=1001的用户的信息。

实际执行的是
select * from zhuru where _id='1001 and 1=0'
因为 _id 是 int 类型,'1001 and 1=0' 转换为数值是 1001,可以满足条件

实际执行的是
select * from zhuru where _id='1001 and 1=0'
因为 _id 是 int 类型,'1001 and 1=0' 转换为数值是 1001,可以满足条件


怎么解决这个问题?
$db -> prepare("select * from zhuru where _id=:usid ");
:usid加单引号会什么都查不到,即使$usid=1001;
Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Vorheriger Artikel:新手求问两个问题Nächster Artikel:服务器端接收客户端的表格