什麼是pdo
?我不給大家講定義,就是給大家我的看法,我認為pdo就是php官方提供的、物件導向的、用來運算元據庫的擴充套件。pdo不單可以訪問mysql,好像一般 的資料庫都行,只要裝上對應的擴充套件就可以了,一般用php的都是mysql,所以我只裝了mysql的。
如何如何安裝pdo?
和安裝別的php擴充套件一樣,windows簡單,在php.ini載入對應的dll檔案就行了。linux還要麻煩一點,需要編譯一下。
為什麼要使用pdo?
首先它是物件導向的,物件導向的好處不必多說。
其次pdo用起來方便、安全,很多時候是會自動過濾特殊符號的,就不必你操心了。
pdo為多種資料庫的訪問提供同樣的介面,以後**要換個資料庫就方便很多,也不用學習其他類了。
pdo的使用方法簡介:
建議:使用pdo,可把magic_quotes_gpc設定關閉,使用pdo本身過濾字串的功能。
第一步、建立pdo例項
**形式:$obj = new pdo('mysql:host=localhost;dbname=資料庫名' , 使用者名稱 , 密碼);
**示例:$obj = new pdo('mysql:host=localhost;dbname=localhost' , 'root' , '123456');
這樣我們就有了乙個pdo的例項了,也就可以使用該例項的對應方法了
第二步、設定引數
**形式: $obj ->setattribute(引數名稱 , 引數值);
**示例: $obj->setattribute(pdo::attr_errmode, pdo::errmode_exception);
示例的意思就是說,當pdo執行出現錯誤的時候以丟擲異常的形式報錯,個人建議用這樣的方式,然後把所有資料庫操作放在try裡,非常方便,不懂可以去看php異常處理方面的文章。
pdo的設定的引數有:
pdo::attr_case
pdo::attr_errmode
pdo::attr_oracle_nulls
pdo::attr_stringify_fetches
pdo::attr_statement_class
pdo::attr_autocommit
pdo::mysql_attr_use_buffered_query
pdo::attr_default_fetch_mode 等
由於篇幅限制,各個引數都代表什麼,都可以設定什麼值,我就不一一介紹了,找本手冊,上面有。
第三步、執行一般操作
**形式: $obj ->exec(sql語句);
**示例: $obj ->exec('set names utf8');
這個函式會返回受影響的行數。
第四步、特殊字元過濾
當您自己構造sql語句,就需要將一些敏感的字元過濾一下,就是類似addslashes函式。
**形式: 過濾後的字串 = $obj ->quote(字串);
第五步、pdostatement操作
pdostatement是另乙個類,其實例可以由pdo例項的prepare或query方法生成,通常我們運算元據庫都是用這個類,而不是直接用pdo類,這個類方法很完善,也很安全。
例如,我們現在建立乙個pdostatement可以這樣($obj 為pdo例項):
$ps = $obj->prepare("select * from `article` where `id` = 1");
這個時候,$ps就是乙個 pdostatement類的例項,我們就可以使用對應的方法了。prepare函式執行之後,其實並沒有向資料庫提交任何請求,也就是說sql語句還沒 有執行,只是「準備」好了乙個sql語句,你需要呼叫$ps 的 execute方法,才真正的執行,
所以我們要這樣:$ps->execute();
而pdo的query方法,就相當於先prepare,得到例項後再execute,
所以,如果**這樣寫($obj 為pdo例項):
$ps = $obj->query("select * from `article` where `id` = 1");
這樣就不用再執行execute了,sql語句已經被執行了,但這個方法和prepare方法一樣,都返回乙個pdostatement類的例項。
既然pdo例項的prepare方法比query方法要多一步,為什麼不直接用query呢?parepare還有什麼用呢?
用處可大了,事實上我們大多數情況,都是用prepare,而不是query,原因就是prepare可以寫帶」引數「的sql語句。
例如 $ps = $obj->prepare("select * from `article` where `id` = ?");
大家看到區別了嗎?我後面那個`id` = 1, 換乘 `id` = ?了,這個問號就代表乙個引數,這個引數是可以修改的。
例如我們這樣寫 $ps->bindvalue(1 , 10);
這句**的意思就是把sql語句中的第乙個問號,替換成10,這樣一來,我們執行$ps->execute(); 實際上是執行了 select * from `article` where `id` = 10。
需要注意的是,bindvalue這裡的第二個引數已經過濾的敏感字元,無需再次過濾,更不需要加引號什麼的,直接用字串或數字的值就行。
執行查詢語句之後,我們可以通過fetch或fetchall函式來獲得查詢結果,兩個函式,乙個是返回一條記錄,乙個是返回所有記錄。
我說了一大堆,也不知道說清楚沒有,寫乙個完整的例項吧。
<?php
try catch(exception $e)
?>
CSS入門教程
css是 cascading style sheets 的簡稱,中文翻譯為 串接樣式表 也有人翻譯為 樣式表 css用以作為網頁的排版和風格設計,在web標準建站中,對css的熟悉和使用是相當重要的乙個內容。css的作用是彌補html的不足,讓網頁的設計更為靈活。這個文章只是為您介紹css的基礎應用...
CSS入門教程
css是 cascading style sheets 的簡稱,中文翻譯為 串接樣式表 也有人翻譯為 樣式表 css用以作為網頁的排版和風格設計,在web標準建站中,對css的熟悉和使用是相當重要的乙個內容。css的作用是彌補html的不足,讓網頁的設計更為靈活。這個文章只是為您介紹css的基礎應用...
Linux入門教程
linux下有兩種使用者 1.root使用者,提示符 2.普通使用者,提示符 在 etc目錄下有乙個inittab檔案,其中有一行配置 id 3 defualt 其中,數字3就代表一啟動進入字元終端,如果改為5則代表一啟動進入x window 修改口令 passwd 退出登入 exit 關閉機器 只...