任何语言都有数据库操做类,对于php也是如此,早期的php由于支持几乎全部的数据库,所以成为php风靡起来的缘由之一。在php5版本之后,出现了pdo-php data object,数据库抽象类,几乎全部的数据库均可以经过pdo来处理,耦合度低,易于项目的迁移,好比第一个版本的项目是创建在mysql下,后期迁移能够到mssql、sql server等等。php
pdo的又一大好处就是防止sql注入。html
一、利用pdo的quote()函数来过滤用户在输入框输入的特殊字符。mysql
直接上代码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'); //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(); }
二、利用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(); }