PHP PDO 基礎

來源:互聯網
上載者:User

PDO是一個“資料庫訪問抽象層”,作用是統一各種資料庫的提供者,與mysql和mysqli的函數庫相比,PDO讓跨資料庫的使用更具有親和力;與ADODB和MDB2相比,PDO更高效。目前而言,實現“資料庫抽象層”任重而道遠,使用PDO這樣的“資料庫訪問抽象層”是一個不錯的選擇。<br />PDO->beginTransaction() — 標明復原起始點<br />PDO->commit() — 標明復原結束點,並執行SQL<br />PDO->__construct() — 建立一個PDO連結資料庫的執行個體<br />PDO->errorCode() — 擷取錯誤碼<br />PDO->errorInfo() — 擷取錯誤的資訊<br />PDO->exec() — 處理一條SQL語句,並返回所影響的條目數<br />PDO->getAttribute() — 擷取一個“資料庫連接對象”的屬性<br />PDO->getAvailableDrivers() — 擷取有效PDO磁碟機名稱<br />PDO->lastInsertId() — 擷取寫入的最後一條資料的主索引值<br />PDO->prepare() — 產生一個“查詢對象”<br />PDO->query() — 處理一條SQL語句,並返回一個“PDOStatement”<br />PDO->quote() — 為某個SQL中的字串添加引號<br />PDO->rollBack() — 執行復原<br />PDO->setAttribute() — 為一個“資料庫連接對象”設定屬性<br />PDOStatement->bindColumn() — Bind a column to a PHP variable<br />PDOStatement->bindParam() — Binds a parameter to the specified variable name<br />PDOStatement->bindValue() — Binds a value to a parameter<br />PDOStatement->closeCursor() — Closes the cursor, enabling the statement to be executed again.<br />PDOStatement->columnCount() — Returns the number of columns in the result set<br />PDOStatement->errorCode() — Fetch the SQLSTATE associated with the last operation on the statement handle<br />PDOStatement->errorInfo() — Fetch extended error information associated with the last operation on the statement handle<br />PDOStatement->execute() — Executes a prepared statement<br />PDOStatement->fetch() — Fetches the next row from a result set<br />PDOStatement->fetchAll() — Returns an array containing all of the result set rows<br />PDOStatement->fetchColumn() — Returns a single column from the next row of a result set<br />PDOStatement->fetchObject() — Fetches the next row and returns it as an object.<br />PDOStatement->getAttribute() — Retrieve a statement attribute<br />PDOStatement->getColumnMeta() — Returns metadata for a column in a result set<br />PDOStatement->nextRowset() — Advances to the next rowset in a multi-rowset statement handle<br />PDOStatement->rowCount() — Returns the number of rows affected by the last SQL statement<br />PDOStatement->setAttribute() — Set a statement attribute<br />PDOStatement->setFetchMode() — Set the default fetch mode for this statement<br />從函數列表可以看出,操作基於不同的對象,“PDO”表示的是一個資料庫連接對象(new PDO產生),“PDOStatement”表示的是一個查詢對象(PDO->query()產生)或者是一個結果集對象(PDO->prepare()產生)。<br />一個“資料庫連接對象”的例子,返回“PDO”:<br /><?php<br />$dbh = new PDO('mysql:host=localhost;dbname=test', 'root', '');<br />?><br />一個“查詢對象”的例子,返回“PDOStatement”:<br /><?php<br />$sql = "INSERT INTO `test`.`table` (`name` ,`age`)VALUES (?, ?);";<br />$stmt = $dbh->prepare($sql);<br />?><br />一個“結果集對象”的例子,返回“PDOStatement”:<br /><?php<br />$sql = "SELECT * FROM `table` WHERE `name` = 'samon'";<br />$stmt = $dbh->query($sql);<br />?><br />在test庫裡面產生table表,並寫入一些資料:<br /><?php<br />$dbh = new PDO('mysql:host=localhost;dbname=test', 'root', '');<br />$dbh->query('set names utf8;');<br />$sql = "<br />DROP TABLE IF EXISTS `table`;<br />CREATE TABLE `test`.`table` (<br />`id` INT( 10 ) NOT NULL AUTO_INCREMENT PRIMARY KEY,<br />`name` VARCHAR( 255 ) NOT NULL ,<br />`age` VARCHAR( 255 ) NOT NULL<br />) ENGINE = InnoDB DEFAULT CHARSET=utf8;<br />INSERT INTO `test`.`table` (`name` ,`age`)VALUES ('samon', '27');<br />INSERT INTO `test`.`table` (`name` ,`age`)VALUES ('leo', '26');<br />INSERT INTO `test`.`table` (`name` ,`age`)VALUES ('ben', '28');<br />";<br />$dbh->query($sql);<br />?><br />PDO->exec()方法的作用是處理一條SQL語句,並返回所影響的條目數。<br />PDO->query()方法的作用是處理一條SQL語句,並返回一個“PDOStatement”。<br />PDO->prepare()方法的作用是產生一個“查詢對象”。<br />PDO->lastInsertId()方法的作用是擷取寫入的最後一條資料的主索引值。<br /><?php<br />$dbh = new PDO('mysql:host=localhost;dbname=test', 'root', '');<br />$dbh->query('set names utf8;');<br />$sql = "INSERT INTO `test`.`table` (`name` ,`age`)VALUES ('mick', 22);";<br />$dbh->query($sql);<br />$lid = $dbh->lastInsertId($sql);<br />print_r($lid); // 顯示主鍵的值<br />?><br />PDO->quote()方法的作用是為某個SQL中的字串添加引號。PDO->quote()方法有兩個參數,第一個參數是字串,第二個參數表示參數的類型。<br />PDO->getAttribute()方法的作用是擷取一個“資料庫連接對象”的屬性。PDO->setAttribute()方法的作用是為一個“資料庫連接對象”設定屬性。<br /><?php<br />// 修改預設的錯誤顯示層級<br />$dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_WARNING);<br />?><br />屬性列表:<br />PDO::PARAM_BOOL<br /> 表示一個布爾類型<br />PDO::PARAM_NULL<br /> 表示一個SQL中的NULL類型<br />PDO::PARAM_INT<br /> 表示一個SQL中的INTEGER類型<br />PDO::PARAM_STR<br /> 表示一個SQL中的SQL CHAR,VARCHAR類型<br />PDO::PARAM_LOB<br /> 表示一個SQL中的large object類型<br />PDO::PARAM_STMT<br /> 表示一個SQL中的recordset類型,還沒有被支援<br />PDO::PARAM_INPUT_OUTPUT<br /> Specifies that the parameter is an INOUT parameter for a stored procedure. You must bitwise-OR this value with an explicit PDO::PARAM_* data type.<br />PDO::FETCH_LAZY<br /> 將每一行結果作為一個對象返回<br />PDO::FETCH_ASSOC<br /> 僅僅返回以索引值作為下標的查詢的結果集,名稱相同的資料只返回一個<br />PDO::FETCH_NAMED<br /> 僅僅返回以索引值作為下標的查詢的結果集,名稱相同的資料以數組形式返回<br />PDO::FETCH_NUM<br /> 僅僅返回以數字作為下標的查詢的結果集<br />PDO::FETCH_BOTH<br /> 同時返回以索引值和數字作為下標的查詢的結果集<br />PDO::FETCH_OBJ<br /> 以對象的形式返回結果集<br />PDO::FETCH_BOUND<br /> 將PDOStatement::bindParam()和PDOStatement::bindColumn()所綁定的值作為變數名賦值後返回<br />PDO::FETCH_COLUMN<br /> 表示僅僅返回結果集中的某一列<br />PDO::FETCH_CLASS<br /> 表示以類的形式返回結果集<br />PDO::FETCH_INTO<br /> 表示將資料合併入一個存在的類中進行返回<br />PDO::FETCH_FUNC<br />PDO::FETCH_GROUP<br />PDO::FETCH_UNIQUE<br />PDO::FETCH_KEY_PAIR<br /> 以首個索引值下表,後面數字下表的形式返回結果集<br />PDO::FETCH_CLASSTYPE<br />PDO::FETCH_SERIALIZE<br /> 表示將資料合併入一個存在的類中並序列化返回<br />PDO::FETCH_PROPS_LATE<br /> Available since PHP 5.2.0<br />PDO::ATTR_AUTOCOMMIT<br /> 在設定成true的時候,PDO會自動嘗試停止接受委託,開始執行<br />PDO::ATTR_PREFETCH<br /> 設定應用程式提前擷取的資料大小,並非所有的資料庫哦度支援<br />PDO::ATTR_TIMEOUT<br /> 設定串連資料庫逾時的值<br />PDO::ATTR_ERRMODE<br /> 設定Error處理的模式<br />PDO::ATTR_SERVER_VERSION<br /> 唯讀屬性,表示PDO已連線的服務器端資料庫版本<br />PDO::ATTR_CLIENT_VERSION<br /> 唯讀屬性,表示PDO串連的用戶端PDO驅動版本<br />PDO::ATTR_SERVER_INFO<br /> 唯讀屬性,表示PDO已連線的服務器的meta資訊<br />PDO::ATTR_CONNECTION_STATUS<br />PDO::ATTR_CASE<br /> 通過PDO::CASE_*中的內容對列的形式進行操作<br />PDO::ATTR_CURSOR_NAME<br /> 擷取或者設定指標的名稱<br />PDO::ATTR_CURSOR<br /> 設定指標的類型,PDO現在支援PDO::CURSOR_FWDONLY和PDO::CURSOR_FWDONLY<br />PDO::ATTR_DRIVER_NAME<br /> 返回使用的PDO驅動的名稱<br />PDO::ATTR_ORACLE_NULLS<br /> 將返回的Null 字元串轉換為SQL的NULL<br />PDO::ATTR_PERSISTENT<br /> 擷取一個存在的串連<br />PDO::ATTR_STATEMENT_CLASS<br />PDO::ATTR_FETCH_CATALOG_NAMES<br /> 在返回的結果集中,使用自訂目錄名稱來代替欄位名。<br />PDO::ATTR_FETCH_TABLE_NAMES<br /> 在返回的結果集中,使用自訂表格格名稱來代替欄位名。<br />PDO::ATTR_STRINGIFY_FETCHES<br />PDO::ATTR_MAX_COLUMN_LEN<br />PDO::ATTR_DEFAULT_FETCH_MODE<br /> Available since PHP 5.2.0<br />PDO::ATTR_EMULATE_PREPARES<br /> Available since PHP 5.1.3.<br />PDO::ERRMODE_SILENT<br /> 發生錯誤時不彙報任何的錯誤資訊,是預設值<br />PDO::ERRMODE_WARNING<br /> 發生錯誤時發出一條php的E_WARNING的資訊<br />PDO::ERRMODE_EXCEPTION<br /> 發生錯誤時拋出一個PDOException<br />PDO::CASE_NATURAL<br /> 回複列的預設顯示格式<br />PDO::CASE_LOWER<br /> 強制列的名字小寫<br />PDO::CASE_UPPER<br /> 強制列的名字大寫<br />PDO::NULL_NATURAL<br />PDO::NULL_EMPTY_STRING<br />PDO::NULL_TO_STRING<br />PDO::FETCH_ORI_NEXT<br /> 擷取結果集中的下一行資料,僅在有指標功能時有效<br />PDO::FETCH_ORI_PRIOR<br /> 擷取結果集中的上一行資料,僅在有指標功能時有效<br />PDO::FETCH_ORI_FIRST<br /> 擷取結果集中的第一行資料,僅在有指標功能時有效<br />PDO::FETCH_ORI_LAST<br /> 擷取結果集中的最後一行資料,僅在有指標功能時有效<br />PDO::FETCH_ORI_ABS<br /> 擷取結果集中的某一行資料,僅在有指標功能時有效<br />PDO::FETCH_ORI_REL<br /> 擷取結果集中當前行後某行的資料,僅在有指標功能時有效<br />PDO::CURSOR_FWDONLY<br /> 建立一個只能向後的指標操作對象<br />PDO::CURSOR_SCROLL<br /> 建立一個指標操作對象,傳遞PDO::FETCH_ORI_*中的內容來控制結果集<br />PDO::ERR_NONE (string)<br /> 設定沒有錯誤時候的錯誤資訊<br />PDO::PARAM_EVT_ALLOC<br /> Allocation event<br />PDO::PARAM_EVT_FREE<br /> Deallocation event<br />PDO::PARAM_EVT_EXEC_PRE<br /> Event triggered prior to execution of a prepared statement.<br />PDO::PARAM_EVT_EXEC_POST<br /> Event triggered subsequent to execution of a prepared statement.<br />PDO::PARAM_EVT_FETCH_PRE<br /> Event triggered prior to fetching a result from a resultset.<br />PDO::PARAM_EVT_FETCH_POST<br /> Event triggered subsequent to fetching a result from a resultset.<br />PDO::PARAM_EVT_NORMALIZE<br /> Event triggered during bound parameter registration allowing the driver to normalize the parameter name.<br />PDO->getAvailableDrivers()方法的作用是擷取有效PDO磁碟機名稱。<br />PDO->errorInfo()方法的作用擷取錯誤的資訊,PDO->errorCode()方法的作用是擷取錯誤碼。<br /><?php<br />$dbh = new PDO('mysql:host=localhost;dbname=test', 'root', '');<br />$dbh->query('set names utf8;');<br />$sql = "INSERT INTO `test`.`table` (`name` ,`ageeeeee`)VALUES ('mick', 22);";<br />$dbh->query($sql);<br />print_r($dbh->errorInfo());<br />/**<br />* Array<br />* (<br />* [0] => 42S22<br />* [1] => 1054<br />* [2] => Unknown column 'ageeeeee' in 'field list'<br />* )<br />*/<br />?><br />PDO->__construct()方法的作用是建立一個PDO連結資料庫的執行個體。<br />PDO->beginTransaction(),PDO->commit(),PDO->rollBack()這三個方法是在支援復原功能時一起使用的。PDO->beginTransaction()方法標明起始點,PDO->commit()方法標明復原結束點,並執行SQL,PDO->rollBack()執行復原。<br /><?php<br />try {<br /> $dbh = new PDO('mysql:host=localhost;dbname=test', 'root', '');<br /> $dbh->query('set names utf8;');<br /> $dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);<br /> $dbh->beginTransaction();<br /> $dbh->exec("INSERT INTO `test`.`table` (`name` ,`age`)VALUES ('mick', 22);");<br /> $dbh->exec("INSERT INTO `test`.`table` (`name` ,`age`)VALUES ('lily', 29);");<br /> $dbh->exec("INSERT INTO `test`.`table` (`name` ,`age`)VALUES ('susan', 21);");<br /> $dbh->commit();</p><p>} catch (Exception $e) {<br /> $dbh->rollBack();<br /> echo "Failed: " . $e->getMessage();<br />}<br />?>

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.