php pdo操作數(shù)據(jù)庫(kù)示例
POD擴(kuò)展是在PHP5中加入,該擴(kuò)展提供PHP內(nèi)置類 PDO來對(duì)數(shù)據(jù)庫(kù)進(jìn)行訪問,不同數(shù)據(jù)庫(kù)使用相同的方法名,解決數(shù)據(jù)庫(kù)連接不統(tǒng)一的問題。
PDO的特點(diǎn):
性能。PDO 從一開始就吸取了現(xiàn)有數(shù)據(jù)庫(kù)擴(kuò)展成功和失敗的經(jīng)驗(yàn)教訓(xùn)。因?yàn)?PDO 的代碼是全新的,所以我們有機(jī)會(huì)重新開始設(shè)計(jì)性能,以利用 PHP 5 的最新特性。
能力。PDO 旨在將常見的數(shù)據(jù)庫(kù)功能作為基礎(chǔ)提供,同時(shí)提供對(duì)于 RDBMS 獨(dú)特功能的方便訪問。
簡(jiǎn)單。PDO 旨在使您能夠輕松使用數(shù)據(jù)庫(kù)。API 不會(huì)強(qiáng)行介入您的代碼,同時(shí)會(huì)清楚地表明每個(gè)函數(shù)調(diào)用的過程。
運(yùn)行時(shí)可擴(kuò)展。PDO 擴(kuò)展是模塊化的,使您能夠在運(yùn)行時(shí)為您的數(shù)據(jù)庫(kù)后端加載驅(qū)動(dòng)程序,而不必重新編譯或重新安裝整個(gè) PHP 程序。例如,PDO_OCI 擴(kuò)展會(huì)替代 PDO 擴(kuò)展實(shí)現(xiàn) oracle 數(shù)據(jù)庫(kù) API。還有一些用于 MySQL、PostgreSQL、ODBC 和 Firebird 的驅(qū)動(dòng)程序,更多的驅(qū)動(dòng)程序尚在開發(fā)。
PDO 安裝
你可以通過 PHP 的 phpinfo() 函數(shù)來查看是否安裝了PDO擴(kuò)展。
1.在 Unix /Linux系統(tǒng)上安裝 PDO
在Unix上或Linux上你需要添加以下擴(kuò)展:
extension=pdo.so
2.在Windows安裝pdo
PDO 和所有主要的驅(qū)動(dòng)作為共享擴(kuò)展隨 PHP 一起發(fā)布,要激活它們只需簡(jiǎn)單地編輯 php.ini 文件,并添加以下擴(kuò)展:
extension=php_pdo.dll
除此之外還有以下對(duì)應(yīng)的各種數(shù)據(jù)庫(kù)擴(kuò)展:
;extension=php_pdo_firebird.dll ;extension=php_pdo_informix.dll ;extension=php_pdo_mssql.dll ;extension=php_pdo_mysql.dll ;extension=php_pdo_oci.dll ;extension=php_pdo_oci8.dll ;extension=php_pdo_odbc.dll ;extension=php_pdo_pgsql.dll ;extension=php_pdo_sqlite.dll
打開php.ini把上面所有行前面的分號(hào)去掉就可以了。
在設(shè)定好這些配置后,我們需要重啟PHP 或 Web服務(wù)器。
下面我們以mysql為例來使用pdo:
<?php $dbms='mysql'; //數(shù)據(jù)庫(kù)類型 $host='localhost'; //數(shù)據(jù)庫(kù)主機(jī)名 $dbName='test'; //使用的數(shù)據(jù)庫(kù) $user='root'; //數(shù)據(jù)庫(kù)連接用戶名 $pass=''; //對(duì)應(yīng)的密碼 $dsn="$dbms:host=$host;dbname=$dbName"; try { $dbh = new PDO($dsn, $user, $pass); //初始化一個(gè)PDO對(duì)象 echo "連接成功<br/>"; /*你還可以進(jìn)行一次搜索操作 foreach ($dbh->query('SELECT * from FOO') as $row) { print_r($row); //你可以用 echo($GLOBAL); 來看到這些值 } */ $dbh = null; } catch (PDOException $e) { die ("Error!: " . $e->getMessage() . "<br/>"); } //默認(rèn)這個(gè)不是長(zhǎng)連接,如果需要數(shù)據(jù)庫(kù)長(zhǎng)連接,需要最后加一個(gè)參數(shù):array(PDO::ATTR_PERSISTENT => true) 變成這樣: $db = new PDO($dsn, $user, $pass, array(PDO::ATTR_PERSISTENT => true)); ?>
再來看看pdo的詳細(xì)介紹:
1.預(yù)定義常量:
PDO::PARAM_BOOL (integer) | 表示布爾數(shù)據(jù)類型。 |
PDO::PARAM_NULL (integer) | 表示 SQL 中的 NULL 數(shù)據(jù)類型。 |
PDO::PARAM_INT (integer) | 表示 SQL 中的整型。 |
PDO::PARAM_STR (integer) | 表示 SQL 中的 CHAR、VARCHAR 或其他字符串類型。 |
PDO::PARAM_LOB (integer) | 表示 SQL 中大對(duì)象數(shù)據(jù)類型。 |
PDO::PARAM_STMT (integer) | 表示一個(gè)記錄集類型。當(dāng)前尚未被任何驅(qū)動(dòng)支持。 |
PDO::PARAM_INPUT_OUTPUT (integer) | 指定參數(shù)為一個(gè)存儲(chǔ)過程的 INOUT 參數(shù)。必須用一個(gè)明確的 PDO::PARAM_* 數(shù)據(jù)類型跟此值進(jìn)行按位或。 |
PDO::FETCH_LAZY (integer) | 指定獲取方式,將結(jié)果集中的每一行作為一個(gè)對(duì)象返回,此對(duì)象的變量名對(duì)應(yīng)著列名。PDO::FETCH_LAZY 創(chuàng)建用來訪問的對(duì)象變量名。在 PDOStatement::fetchAll() 中無(wú)效。 |
PDO::FETCH_ASSOC (integer) | 指定獲取方式,將對(duì)應(yīng)結(jié)果集中的每一行作為一個(gè)由列名索引的數(shù)組返回。如果結(jié)果集中包含多個(gè)名稱相同的列,則PDO::FETCH_ASSOC每個(gè)列名只返回一個(gè)值。 |
PDO::FETCH_NAMED (integer) | 指定獲取方式,將對(duì)應(yīng)結(jié)果集中的每一行作為一個(gè)由列名索引的數(shù)組返回。如果結(jié)果集中包含多個(gè)名稱相同的列,則PDO::FETCH_ASSOC每個(gè)列名 返回一個(gè)包含值的數(shù)組。 |
PDO::FETCH_NUM (integer) | 指定獲取方式,將對(duì)應(yīng)結(jié)果集中的每一行作為一個(gè)由列號(hào)索引的數(shù)組返回,從第 0 列開始。 |
PDO::FETCH_BOTH (integer) | 指定獲取方式,將對(duì)應(yīng)結(jié)果集中的每一行作為一個(gè)由列號(hào)和列名索引的數(shù)組返回,從第 0 列開始。 |
PDO::FETCH_OBJ (integer) | 指定獲取方式,將結(jié)果集中的每一行作為一個(gè)屬性名對(duì)應(yīng)列名的對(duì)象返回。 |
PDO::FETCH_BOUND (integer) | 指定獲取方式,返回 TRUE 且將結(jié)果集中的列值分配給通過 PDOStatement::bindParam() 或 PDOStatement::bindColumn() 方法綁定的 PHP 變量。 |
PDO::FETCH_COLUMN (integer) | 指定獲取方式,從結(jié)果集中的下一行返回所需要的那一列。 |
PDO::FETCH_CLASS (integer) | 指定獲取方式,返回一個(gè)所請(qǐng)求類的新實(shí)例,映射列到類中對(duì)應(yīng)的屬性名。 注意: 如果所請(qǐng)求的類中不存在該屬性,則調(diào)用 __set() 魔術(shù)方法 |
PDO::FETCH_INTO (integer) | 指定獲取方式,更新一個(gè)請(qǐng)求類的現(xiàn)有實(shí)例,映射列到類中對(duì)應(yīng)的屬性名。 |
PDO::FETCH_FUNC (integer) | 允許在運(yùn)行中完全用自定義的方式處理數(shù)據(jù)。(僅在 PDOStatement::fetchAll() 中有效)。 |
PDO::FETCH_GROUP (integer) | 根據(jù)值分組返回。通常和 PDO::FETCH_COLUMN 或 PDO::FETCH_KEY_PAIR 一起使用。 |
PDO::FETCH_UNIQUE (integer) | 只取唯一值。 |
PDO::FETCH_KEY_PAIR (integer) | 獲取一個(gè)有兩列的結(jié)果集到一個(gè)數(shù)組,其中第一列為鍵名,第二列為值。自 PHP 5.2.3 起可用。 |
PDO::FETCH_CLASSTYPE (integer) | 根據(jù)第一列的值確定類名。 |
PDO::FETCH_SERIALIZE (integer) | 類似 PDO::FETCH_INTO ,但是以一個(gè)序列化的字符串表示對(duì)象。自 PHP 5.1.0 起可用。從 PHP 5.3.0 開始,如果設(shè)置此標(biāo)志,則類的構(gòu)造函數(shù)從不會(huì)被調(diào)用。 |
PDO::FETCH_PROPS_LATE (integer) | 設(shè)置屬性前調(diào)用構(gòu)造函數(shù)。自 PHP 5.2.0 起可用。 |
PDO::ATTR_AUTOCOMMIT (integer) | 如果此值為 FALSE ,PDO 將試圖禁用自動(dòng)提交以便數(shù)據(jù)庫(kù)連接開始一個(gè)事務(wù)。 |
PDO::ATTR_PREFETCH (integer) | 設(shè)置預(yù)取大小來為你的應(yīng)用平衡速度和內(nèi)存使用。并非所有的數(shù)據(jù)庫(kù)/驅(qū)動(dòng)組合都支持設(shè)置預(yù)取大小。較大的預(yù)取大小導(dǎo)致性能提高的同時(shí)也會(huì)占用更多的內(nèi)存。 |
PDO::ATTR_TIMEOUT (integer) | 設(shè)置連接數(shù)據(jù)庫(kù)的超時(shí)秒數(shù)。 |
PDO::ATTR_ERRMODE (integer) | 關(guān)于此屬性的更多信息請(qǐng)參見 錯(cuò)誤及錯(cuò)誤處理 部分。 |
PDO::ATTR_SERVER_VERSION (integer) | 此為只讀屬性;返回 PDO 所連接的數(shù)據(jù)庫(kù)服務(wù)的版本信息。 |
PDO::ATTR_CLIENT_VERSION (integer) | 此為只讀屬性;返回 PDO 驅(qū)動(dòng)所用客戶端庫(kù)的版本信息。 |
PDO::ATTR_SERVER_INFO (integer) | 此為只讀屬性。返回一些關(guān)于 PDO 所連接的數(shù)據(jù)庫(kù)服務(wù)的元信息。 |
PDO::ATTR_CONNECTION_STATUS (integer) | |
PDO::ATTR_CASE (integer) | 用類似 PDO::CASE_* 的常量強(qiáng)制列名為指定的大小寫。 |
PDO::ATTR_CURSOR_NAME (integer) | 獲取或設(shè)置使用游標(biāo)的名稱。當(dāng)使用可滾動(dòng)游標(biāo)和定位更新時(shí)候非常有用。 |
PDO::ATTR_CURSOR (integer) | 選擇游標(biāo)類型。 PDO 當(dāng)前支持 PDO::CURSOR_FWDONLY 和 PDO::CURSOR_SCROLL。一般為 PDO::CURSOR_FWDONLY,除非確實(shí)需要一個(gè)可滾動(dòng)游標(biāo)。 |
PDO::ATTR_DRIVER_NAME (string) | 返回驅(qū)動(dòng)名稱。
使用 PDO::ATTR_DRIVER_NAME 的例子: <?php if ($db->getAttribute(PDO::ATTR_DRIVER_NAME) == 'mysql') { echo "Running on mysql; doing something mysql specific here\n"; } ?> |
PDO::ATTR_ORACLE_NULLS (integer) | 在獲取數(shù)據(jù)時(shí)將空字符串轉(zhuǎn)換成 SQL 中的 NULL 。 |
PDO::ATTR_PERSISTENT (integer) | 請(qǐng)求一個(gè)持久連接,而非創(chuàng)建一個(gè)新連接。關(guān)于此屬性的更多信息請(qǐng)參見 連接與連接管理 。 |
PDO::ATTR_STATEMENT_CLASS (integer) | |
PDO::ATTR_FETCH_CATALOG_NAMES (integer) | 將包含的目錄名添加到結(jié)果集中的每個(gè)列名前面。目錄名和列名由一個(gè)小數(shù)點(diǎn)分開(.)。此屬性在驅(qū)動(dòng)層面支持,所以有些驅(qū)動(dòng)可能不支持此屬性。 |
PDO::ATTR_FETCH_TABLE_NAMES (integer) | 將包含的表名添加到結(jié)果集中的每個(gè)列名前面。表名和列名由一個(gè)小數(shù)點(diǎn)分開(.)。此屬性在驅(qū)動(dòng)層面支持,所以有些驅(qū)動(dòng)可能不支持此屬性。 |
PDO::ATTR_STRINGIFY_FETCHES (integer) | |
PDO::ATTR_MAX_COLUMN_LEN (integer) | |
PDO::ATTR_DEFAULT_FETCH_MODE (integer) | 自 PHP 5.2.0 起可用。 |
PDO::ATTR_EMULATE_PREPARES (integer) | 自 PHP 5.1.3 起可用。 |
PDO::ERRMODE_SILENT (integer) | 如果發(fā)生錯(cuò)誤,則不顯示錯(cuò)誤或異常。希望開發(fā)人員顯式地檢查錯(cuò)誤。此為默認(rèn)模式。關(guān)于此屬性的更多信息請(qǐng)參見 錯(cuò)誤與錯(cuò)誤處理 。 |
PDO::ERRMODE_WARNING (integer) | 如果發(fā)生錯(cuò)誤,則顯示一個(gè) PHP E_WARNING 消息。關(guān)于此屬性的更多信息請(qǐng)參見 錯(cuò)誤與錯(cuò)誤處理。 |
PDO::ERRMODE_EXCEPTION (integer) | 如果發(fā)生錯(cuò)誤,則拋出一個(gè) PDOException 異常。關(guān)于此屬性的更多信息請(qǐng)參見 錯(cuò)誤與錯(cuò)誤處理。 |
PDO::CASE_NATURAL (integer) | 保留數(shù)據(jù)庫(kù)驅(qū)動(dòng)返回的列名。 |
PDO::CASE_LOWER (integer) | 強(qiáng)制列名小寫。 |
PDO::CASE_UPPER (integer) | 強(qiáng)制列名大寫。 |
PDO::NULL_NATURAL (integer) | |
PDO::NULL_EMPTY_STRING (integer) | |
PDO::NULL_TO_STRING (integer) | |
PDO::FETCH_ORI_NEXT (integer) | 在結(jié)果集中獲取下一行。僅對(duì)可滾動(dòng)游標(biāo)有效。 |
PDO::FETCH_ORI_PRIOR (integer) | 在結(jié)果集中獲取上一行。僅對(duì)可滾動(dòng)游標(biāo)有效。 |
PDO::FETCH_ORI_FIRST (integer) | 在結(jié)果集中獲取第一行。僅對(duì)可滾動(dòng)游標(biāo)有效。 |
PDO::FETCH_ORI_LAST (integer) | 在結(jié)果集中獲取最后一行。僅對(duì)可滾動(dòng)游標(biāo)有效。 |
PDO::FETCH_ORI_ABS (integer) | 根據(jù)行號(hào)從結(jié)果集中獲取需要的行。僅對(duì)可滾動(dòng)游標(biāo)有效。 |
PDO::FETCH_ORI_REL (integer) | 根據(jù)當(dāng)前游標(biāo)位置的相對(duì)位置從結(jié)果集中獲取需要的行。僅對(duì)可滾動(dòng)游標(biāo)有效。 |
PDO::CURSOR_FWDONLY (integer) | 創(chuàng)建一個(gè)只進(jìn)游標(biāo)的 PDOStatement 對(duì)象。此為默認(rèn)的游標(biāo)選項(xiàng),因?yàn)榇擞螛?biāo)最快且是 PHP 中最常用的數(shù)據(jù)訪問模式。 |
PDO::CURSOR_SCROLL (integer) | 創(chuàng)建一個(gè)可滾動(dòng)游標(biāo)的 PDOStatement 對(duì)象。通過 PDO::FETCH_ORI_* 常量來控制結(jié)果集中獲取的行。 |
PDO::ERR_NONE (string) | 對(duì)應(yīng) SQLSTATE '00000',表示 SQL 語(yǔ)句沒有錯(cuò)誤或警告地成功發(fā)出。當(dāng)用 PDO::errorCode() 或 PDOStatement::errorCode() 來確定是否有錯(cuò)誤發(fā)生時(shí),此常量非常方便。在檢查上述方法返回的錯(cuò)誤狀態(tài)代碼時(shí),會(huì)經(jīng)常用到。 |
PDO::PARAM_EVT_ALLOC (integer) | 分配事件 |
PDO::PARAM_EVT_FREE (integer) | 解除分配事件 |
PDO::PARAM_EVT_EXEC_PRE (integer) | 執(zhí)行一條預(yù)處理語(yǔ)句之前觸發(fā)事件。 |
PDO::PARAM_EVT_EXEC_POST (integer) | 執(zhí)行一條預(yù)處理語(yǔ)句之后觸發(fā)事件。 |
PDO::PARAM_EVT_FETCH_PRE (integer) | 從一個(gè)結(jié)果集中取出一條結(jié)果之前觸發(fā)事件。 |
PDO::PARAM_EVT_FETCH_POST (integer) | 從一個(gè)結(jié)果集中取出一條結(jié)果之后觸發(fā)事件。 |
PDO::PARAM_EVT_NORMALIZE (integer) | 在綁定參數(shù)注冊(cè)允許驅(qū)動(dòng)程序正?;兞棵麜r(shí)觸發(fā)事件。 |
2.PDO 類:
- PDO::beginTransaction — 啟動(dòng)一個(gè)事務(wù)
- PDO::commit — 提交一個(gè)事務(wù)
- PDO::__construct — 創(chuàng)建一個(gè)表示數(shù)據(jù)庫(kù)連接的 PDO 實(shí)例
- PDO::errorCode — 獲取跟數(shù)據(jù)庫(kù)句柄上一次操作相關(guān)的 SQLSTATE
- PDO::errorInfo — 返回最后一次操作數(shù)據(jù)庫(kù)的錯(cuò)誤信息
- PDO::exec — 執(zhí)行一條 SQL 語(yǔ)句,并返回受影響的行數(shù)
- PDO::getAttribute — 取回一個(gè)數(shù)據(jù)庫(kù)連接的屬性
- PDO::getAvailableDrivers — 返回一個(gè)可用驅(qū)動(dòng)的數(shù)組
- PDO::inTransaction — 檢查是否在一個(gè)事務(wù)內(nèi)
- PDO::lastInsertId — 返回最后插入行的ID或序列值
- PDO::prepare — 備要執(zhí)行的SQL語(yǔ)句并返回一個(gè) PDOStatement 對(duì)象
- PDO::query — 執(zhí)行 SQL 語(yǔ)句,返回PDOStatement對(duì)象,可以理解為結(jié)果集
- PDO::quote — 為SQL語(yǔ)句中的字符串添加引號(hào)。
- PDO::rollBack — 回滾一個(gè)事務(wù)
- PDO::setAttribute — 設(shè)置屬性
- PDOStatement 類:
- PDOStatement::bindColumn — 綁定一列到一個(gè) PHP 變量
- PDOStatement::bindParam — 綁定一個(gè)參數(shù)到指定的變量名
- PDOStatement::bindValue — 把一個(gè)值綁定到一個(gè)參數(shù)
- PDOStatement::closeCursor — 關(guān)閉游標(biāo),使語(yǔ)句能再次被執(zhí)行。
- PDOStatement::columnCount — 返回結(jié)果集中的列數(shù)
- PDOStatement::debugDumpParams — 打印一條 SQL 預(yù)處理命令
- PDOStatement::errorCode — 獲取跟上一次語(yǔ)句句柄操作相關(guān)的 SQLSTATE
- PDOStatement::errorInfo — 獲取跟上一次語(yǔ)句句柄操作相關(guān)的擴(kuò)展錯(cuò)誤信息
- PDOStatement::execute — 執(zhí)行一條預(yù)處理語(yǔ)句
- PDOStatement::fetch — 從結(jié)果集中獲取下一行
- PDOStatement::fetchAll — 返回一個(gè)包含結(jié)果集中所有行的數(shù)組
- PDOStatement::fetchColumn — 從結(jié)果集中的下一行返回單獨(dú)的一列。
- PDOStatement::fetchObject — 獲取下一行并作為一個(gè)對(duì)象返回。
- PDOStatement::getAttribute — 檢索一個(gè)語(yǔ)句屬性
- PDOStatement::getColumnMeta — 返回結(jié)果集中一列的元數(shù)據(jù)
- PDOStatement::nextRowset — 在一個(gè)多行集語(yǔ)句句柄中推進(jìn)到下一個(gè)行集
- PDOStatement::rowCount — 返回受上一個(gè) SQL 語(yǔ)句影響的行數(shù)
- PDOStatement::setAttribute — 設(shè)置一個(gè)語(yǔ)句屬性
- PDOStatement::setFetchMode — 為語(yǔ)句設(shè)置默認(rèn)的獲取模式。
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
- PHP PDO預(yù)處理語(yǔ)句及事務(wù)的使用
- PHP的PDO預(yù)處理語(yǔ)句與存儲(chǔ)過程
- php_pdo 預(yù)處理語(yǔ)句詳解
- PHP封裝類似thinkphp連貫操作數(shù)據(jù)庫(kù)Db類與簡(jiǎn)單應(yīng)用示例
- PHP5中使用mysqli的prepare操作數(shù)據(jù)庫(kù)的介紹
- PHP入門教程之使用Mysqli操作數(shù)據(jù)庫(kù)的方法(連接,查詢,事務(wù)回滾等)
- PHP使用PDO操作數(shù)據(jù)庫(kù)的亂碼問題解決方法
- PHP中使用匿名函數(shù)操作數(shù)據(jù)庫(kù)的例子
- PHP中的MYSQL常用函數(shù)(php下操作數(shù)據(jù)庫(kù)必備)
- php 使用預(yù)處理語(yǔ)句操作數(shù)據(jù)庫(kù)
相關(guān)文章
微信開發(fā)之php表單微信中自動(dòng)提交兩次問題解決辦法
這篇文章主要介紹了微信開發(fā)之php表單微信中自動(dòng)提交兩次問題解決辦法的相關(guān)資料,這里提供了解決辦法及實(shí)例代碼,需要的朋友可以參考下2017-01-01玩轉(zhuǎn)圖像函數(shù)庫(kù)—常見圖形操作
玩轉(zhuǎn)圖像函數(shù)庫(kù)—常見圖形操作...2006-09-09