Maison >développement back-end >tutoriel php >这段代码为什么能查询出_id = 1001的用户信息?

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

WBOY
WBOYoriginal
2016-06-20 12:31:031274parcourir

<?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;
Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Article précédent:新手求问两个问题Article suivant:服务器端接收客户端的表格