任何語言都有數據庫操做類,對於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(); }