任何语言都有数据库操作类,对于php也是如此,早期的php因为支持几乎所有的数据库,因此成为php风靡起来的原因之一。在php5版本以后,出现了pdo-php data object,数据库抽象类,几乎所有的数据库都可以通过pdo来处理,耦合度低,易于项目的迁移,比如第一个版本的项目是建立在mysql下,后期迁移可以到mssql、sql server等等。
pdo的又一大好处就是防止sql注入。
1、利用pdo的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();
}
2、利用prepare() 和stmt来实现防止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();
}