一:爲什麼選擇PDO
PDO提供了一個數據訪問抽象層,意味着無論使用哪種數據庫都可以用同樣的函數進行查詢獲取數據
提高了運行效率(這個暫時沒有什麼深入瞭解)
二:查看是否支持PDO(phpinfo())
三:以Mysql來做實例
可以在http://php.net/manual/zh/book.pdo.php中查看對應的方法
首先創建一個數據庫連接的PDO實例
PDO::__construct (
string
$dsn
[, string
$username
[, string
$password
[, array
$driver_options
]]] ) 可以放在try catch中
dsn一個DSN的PDO驅動名、緊隨其後的冒號、以及具體PDO驅動鏈接語法組成
username 用戶名
password用戶密碼
driver_options一個具體驅動的連接選項的鍵=>值數組
$pdo = new PDO('mysql:dbname=mytest;host=localhost','root','');
執行簡單的查詢:對於不返回結果的查詢(insert update delete)使用exec()方法,它使用需要執行的語句作爲參數
$name = "name2";
$sex = 'man';
$insert = sprintf("INSERT INTO mytest(name,sex) VALUES('%s','%s');",$name,$sex); //可以防止SQL注入
$pdo->exec($insert);
$id = $pdo->lastInsertId(); //查看插入操作動態生成的主鍵值
爲了防止SQL注入,可以將字符串放入到PDO的quote()方法
$data = $pdo->quote($unsafe_data);
$pdo->exec("insert into tableN(colum) values($data)";
對於返回值的select操作使用query操作 $result = $pdo->query($insertQ); 查看返回記錄個數使用$result->rowCount()
$select = $pdo->query('select name,sex from mytest');var_dump($select);
$select->setFetchMode(PDO::FETCH_NUM); //
while($row = $select->fetch()){
print $row[0] . "\t" . $row[1] ;
}
四:也可以使用prepare預定義語句,同時因爲這個方式查詢語句和數據分開傳送就不需要防範SQl注入攻擊
$selectQuery = 'SELECT name, sex FROM mytest WHERE name = :name AND sex = :sex';
$sth = $pdo->prepare($selectQuery);
$sth->execute(array(':name' => 'name12', ':sex' => 'man'));
$users = $sth->fetchAll();