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

WBOY
Release: 2016-06-20 12:31:03
Original
1271 people have browsed it

<?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();}
Copy after login


这段代码为什么能查询出_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;
source:php.cn
Statement of this Website
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template