細雨夢回雞塞遠,小樓吹徹玉笙寒。
這篇部落格也拖了好幾天了,今天終于寫出來了,拖延症真要命。
為什麼要用pdo呢?因為之前的mysql擴充在php新的版本中,漸漸被淘汰了,原因呢,有很多,比較嚴重的就是,mysql開發組不進行疊代了,還有就是這個mysql不支援參數綁定之類的東西。so,就要用新的來代替他了
具體原因看這個
預編譯有很多好的地方
1. 安全一點,占位符有指定類型,他也僅僅是作為參數的值傳入到sql當中的。
2.多次插入提高效率。因為sql已經編譯過了,直接綁定參數,減少sql語句編譯的時間
window下先去php.ini中把pdo的擴充前面的分号去掉,然後看phpinfo()中是否有對應資訊,有了就可以用了。記得重新開機apache!!
<?php
/*
* pdo 練習 2017/3/27
*
* PDO::exec()主要是針對沒有結果集合傳回的操作,比如INSERT、UPDATE、DELETE等操作,它傳回的結果是目前操作影響的列數。
* PDO::query()主要是用于有記錄結果傳回的操作,特别是SELECT操作
* PDO::prepare()主要是預處理操作,需要通過$rs->execute()來執行預處理裡面的SQL語句,這個方法可以綁定參數,功能比較強大
*
* */
try{
$dsn = "mysql:host=localhost;dbname=yu";
$db = new PDO($dsn, 'root', 'root');
//關閉自動送出
$db->setAttribute(PDO::ATTR_AUTOCOMMIT, 0);
// 查詢操作 select
$rs = $db->query("SELECT * FROM about");
$data = $rs->fetchAll();
print_r($data);die;
// 插入操作 insert
$sql = "insert into about set picture='/picture/test.jpg',desc1='the perfect day',status='1'";
$res = $db->exec($sql);
print_r($res);die;
// 修改操作 udpate
$sql = "update about set picture='/picture/test1.jpg' where id=4";
$res = $db->exec($sql);
print_r($res);die;
// 删除操作 delete
$sql = "delete from about where id=4";
$res = $db->exec($sql);
print_r($res);die;
// 綁定參數 如果sql'語句中用的是?号作為占位符,那麼在bindParam參數中,第一個參數就以占位符的順序填寫,比如1代表第一個?号的值
$obj = $db->prepare("select * from about where id = ?");
$id = 3;
$obj->bindParam(1,$id,PDO::PARAM_INT);
$obj->execute();
$result = $obj->fetchALL(PDO::FETCH_ASSOC);
var_dump($result);
// 綁定參數 如果sql語句中用的是 " :變量名 "作為占位符,那麼bingParam參數中,第一個參數就是“ :變量名 ”
// bindParam函數:par1,占位符辨別,par2:值(必須以變量形式展現,否則報:Cannot pass parameter 2),par3:值的模式
$obj = $db->prepare("select * from about where id = :id");
$id = 3;
$obj->bindParam(':id',$id,PDO::PARAM_INT);
$obj->execute();
$result = $obj->fetchALL(PDO::FETCH_ASSOC);
var_dump($result);
// 事務
// MyIsAM不支援事務!!!
$db->beginTransaction();
$sql = "update about set picture='643' where id=5";
$res = $db->exec($sql);
echo $res;
$db->rollBack(); //復原
$db->commit(); //送出
}catch (PDOException $e){
print "Error is:".$e->getMessage()."<br/>";
}
?>