PDO入門教程

2022-08-15 16:30:16 字數 2772 閱讀 8549

什麼是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 關閉機器 只...