20
2017
07

PHP开发 - PDO quote、预处理语句占位符 方法防止sql注入

PDO quote方法防止sql注入

不要相信用户任何的输入!


quote不建议使用 建议使用预处理语句的形式~

<?php 
header('content-type:text/html;charset=utf-8');
$username=$_POST['username'];
$password=$_POST['password'];
try{
	$pdo=new PDO('mysql:host=localhost;dbname=imooc','root','root');	
	//echo $pdo->quote($username);
	//$sql="select * from user where username='{$username}' and password='{$password}'";
	//echo $sql;
	//通过quote():返回带引号的字符串,过滤字符串中的特殊字符
	$username=$pdo->quote($username);
	$sql="select * from user where username={$username} and password='{$password}'";
	echo $sql;
	$stmt=$pdo->query($sql);
	//PDOStatement对象的方法:rouCount():对于select操作返回的结果集中记录的条数,
	//对于INSERT、UPDATE、DELETE返回受影响的记录的条数
	echo $stmt->rowCount();
}catch(PDOException $e){
	echo $e->getMessage();
}


预处理语句的形式防止sql注入


占位符

<?php 
header('content-type:text/html;charset=utf-8');
$username=$_POST['username'];
$password=$_POST['password'];
try{
	$pdo=new PDO('mysql:host=localhost;dbname=imooc','root','root');	
	$sql="select * from user where username=:username and password=:password";
	$stmt=$pdo->prepare($sql);
	$stmt->execute(array(":username"=>$username,":password"=>$password));
	echo $stmt->rowCount();
	
}catch(PDOException $e){
	echo $e->getMessage();
}
<?php 
header('content-type:text/html;charset=utf-8');
$username=$_POST['username'];
$password=$_POST['password'];
try{
	$pdo=new PDO('mysql:host=localhost;dbname=imooc','root','root');	
	$sql="select * from user where username=? and password=?";
	$stmt=$pdo->prepare($sql);
	$stmt->execute(array($username,$password));
	echo $stmt->rowCount();
	
}catch(PDOException $e){
	echo $e->getMessage();
}


« 上一篇 下一篇 »

发表评论:

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。