MySQL,Oracle,SQLServer,SQLite、PostgreSQL等等php
extension=php_pdo_mysql.dllhtml
extension=php_pdo_sqlite.dllmysql
print_r(pdo_drivers());
輸出:web
Array ( [0] => mysql [1] => sqlite )
PDO::__construct($dsn, [optional] $username, [optional] $passwd, [optional] $options) Creates a PDO instance representing a connection to a database. Parameters: $dsn : datasource name. [optional] $username [optional] $passwd [optional] $options : Param Array. Optimize PDO.
一、將參數嵌入到構造方法sql
$dsn = 'mysql:dbname=myschool;host=localhost'; $user = 'root'; $password = 'rootkit'; try { $pdo = new PDO ( $dsn, $user, $password ); } catch ( PDOException $ex ) { echo '鏈接數據庫失敗:' . $ex->getMessage (); } if($pdo!=null){ echo '鏈接數據庫成功!'; }else{ echo '鏈接數據庫失敗!'; }
端口非3306的dsn書寫方式:數據庫
$dsn='mysql:host=localhost;port=9906;dbname=mydatabase',$user,$pwd,$opt);
二、參數放在文件中數組
三、引用php.ini文件緩存
四、$options參數安全
PDO構造函數第四個參數,爲PDO預約義常量關聯數組,通常用來優化數據庫操做,用來傳遞給PDO對象或者底層驅動。服務器
PDO預約義常量,詳見本文末附表。
例如:PDO持久化鏈接代碼:
PDO持久化鏈接解釋:該鏈接在使用完畢或者PHP腳本結束後並不會被關閉,而是被PHP緩存起來。當另外一個使用相同憑證(主機、端口、數據庫名、用戶名、密碼等信息徹底一致)的PHP腳本請求創建鏈接時,PHP將直接返回以前被緩存起來的鏈接,從而達到鏈接重用。持久鏈接緩存能夠避免每次訪問數據庫都要創建一個新鏈接的開銷,從而讓web應用程序更快。
方法名 |
描述 |
exec( ) |
執行一條SQL語句並返回影響的行數 |
query( ) |
執行一條SQL語句並返回一個結果集 |
prepare( ) |
爲執行準備一條SQL語句,返回語句執行後的聯合結果集(PDOStatement)
|
beginTransaction( ) |
開始事務 |
rollBack( ) |
回滾一個事務 |
commit ( ) |
提交事務 |
quote ( ) |
返回添加了引號的字符串,以使其可用於SQL語句中 |
errorCode ( ) |
從數據庫返回一個錯誤代號,若是有的話 |
errorInfo ( ) |
從數據庫返回一個含有錯誤信息的數組,若是有的話 |
getAttribute( ) |
返回一個數據庫鏈接屬性 |
setAttribute ( ) |
設置一個數據庫鏈接屬性 |
lastInsertId( ) |
返回最新插入到數據庫的行(的ID) |
PDO提供的成員方法能夠完成與數據庫之間的鏈接管理、存取屬性、錯誤處理、查詢執行、預處理語句、以及事務的操做。
一、調整方式
二、getAttribute()
$opt=array(PDO::ATTR_PERSISTENT => TRUE); try { $dbh = new PDO('mysql:dbname=myschool;host=localhost', 'root', 'rootkit', $opt); } catch (PDOException $e) { echo '數據庫鏈接失敗:'.$e->getMessage(); exit; } echo "<br>PDO是否關閉自動提交功能:" .$dbh->getAttribute(PDO::ATTR_AUTOCOMMIT); echo "<br>當前PDO的錯誤處理的模式:" .$dbh->getAttribute(PDO::ATTR_ERRMODE); echo "<br>表字段字符的大小寫轉換: " .$dbh->getAttribute(PDO::ATTR_CASE); echo "<br>與鏈接狀態相關特有信息: " .$dbh->getAttribute(PDO::ATTR_CONNECTION_STATUS); echo "<br>空字符串轉換爲SQL的null:" .$dbh->getAttribute(PDO::ATTR_ORACLE_NULLS); echo "<br>應用程序提早獲取數據大小:" .$dbh->getAttribute(PDO::ATTR_PERSISTENT); echo "<br>與數據庫特有的服務器信息:" .$dbh->getAttribute(PDO::ATTR_SERVER_INFO); echo "<br>數據庫服務器版本號信息:" .$dbh->getAttribute(PDO::ATTR_SERVER_VERSION); echo "<br>數據庫客戶端版本號信息:" .$dbh->getAttribute(PDO::ATTR_CLIENT_VERSION);
三、setAttribute()
public bool PDO::setAttribute ( int $attribute , mixed $value )
Sets an attribute on the database handle. Some of the available generic attributes are listed below; some drivers may make use of additional driver specific attributes.
PDO::ATTR_CASE: Force column names to a specific case.
PDO::ATTR_ERRMODE: Error reporting.
PDO::ATTR_ORACLE_NULLS (available with all drivers, not just Oracle): Conversion of NULL and empty strings.
PDO::ATTR_STRINGIFY_FETCHES: Convert numeric values to strings when fetching. Requires bool.
PDO::ATTR_STATEMENT_CLASS: Set user-supplied statement class derived from PDOStatement. Cannot be used with persistent PDO instances. Requires array(string classname, array(mixed constructor_args)).
PDO::ATTR_TIMEOUT: Specifies the timeout duration in seconds. Not all drivers support this option, and its meaning may differ from driver to driver. For example, sqlite will wait for up to this time value before giving up on obtaining an writable lock, but other drivers may interpret this as a connect or a read timeout interval. Requires int.
PDO::ATTR_AUTOCOMMIT (available in OCI, Firebird and MySQL): Whether to autocommit every single statement.
PDO::ATTR_EMULATE_PREPARES Enables or disables emulation of prepared statements. Some drivers do not support native prepared statements or have limited support for them. Use this setting to force PDO to either always emulate prepared statements (if TRUE), or to try to use native prepared statements (if FALSE). It will always fall back to emulating the prepared statement if the driver cannot successfully prepare the current query. Requires bool.
PDO::MYSQL_ATTR_USE_BUFFERED_QUERY (available in MySQL): Use buffered queries.
PDO::ATTR_DEFAULT_FETCH_MODE: Set default fetch mode. Description of modes is available in PDOStatement::fetch() documentation.
PDO::ATTR_ORACLE_NULLS (available with all drivers, not just Oracle): Conversion of NULL and empty strings.
只有Oracle數據庫返回空字符串,PDO會將其轉換爲NULL。其餘數據庫可能原樣返回。其餘數據庫爲了模擬Oracle的效果,能夠設置:
$pdo->setAttribute(PDO::ATTR_ORACLE_NULLS, true);
PDO::ATTR_ERRMODE: Error reporting.
默認方式,語句對象或者調用數據庫對象出錯能夠經過PDO的errorCode()和errorInfo()方法對語句對象和數據庫操做對象進行檢查。
PHP能夠捕獲告警信息。
設置方式:
$pdo->setAttribute(PDO::ATTR_ERRMODE,PDO::ERRMODE_WARNING);
PHP捕獲PDO異常對象。PDO異常對象包含了錯誤代碼和錯誤信息屬性。
設置方式:
$pdo->setAttribute(PDO::ATTR_ERRMODE,PDO::ERRMODE_EXCEPTION);
SQL錯誤代碼和錯誤信息的定義:SQLSTATE
文件地址:wamp\bin\mysql\mysql5.6.17\include\ sql_state.h
/* * 數據庫鏈接優化選項: * 一、持久化鏈接:持久化 * 二、錯誤處理模式:拋出異常 * 三、空字符串轉null值:打開 */ $option = array ( PDO::ATTR_PERSISTENT => TRUE, PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION, PDO::ATTR_ORACLE_NULLS=>true ); try { $pdo = new PDO ( 'mysql:dbname=football;host=localhost', 'root', 'rootkit', $option ); //增刪改 $query="INSERT INTO users VALUES('tom','123','訪客')"; $pdo->exec($query); } catch ( PDOException $e ) { echo '數據庫操做失敗:' . $e->getMessage (); exit (); }
/* * 數據庫鏈接優化選項: * 一、持久化鏈接:持久化 * 二、錯誤處理模式:拋出異常 * 三、空字符串轉null值:打開 */ $option = array ( PDO::ATTR_PERSISTENT => TRUE, PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION, PDO::ATTR_ORACLE_NULLS=>true ); try { $pdo = new PDO ( 'mysql:dbname=football;host=localhost', 'root', 'rootkit', $option ); //增刪改 //$query="INSERT INTO users VALUES('tom','123','訪客')"; //$pdo->exec($query); //查詢 $query="SELECT * FROM users"; $pdostmt=$pdo->query($query); echo "一共{$pdostmt->rowCount()}條記錄<br>"; echo "id,account,pwd,role<br>"; foreach ($pdostmt as $row){ echo "{$row['id']},{$row['username']},{$row['userpassword']},{$row['userrole']}<br>"; } } catch ( PDOException $e ) { echo '數據庫操做失敗:' . $e->getMessage (); exit (); }
若是查詢語句格式相同,每次須要傳入的參數不一樣,能夠考慮使用預處理方式。預處理分紅兩個步驟執行:
一、PDO對象的prepare()構建查詢語句;
二、使用PDOStatement對象的execute()方法執行查詢語句。
方法名 |
描述 |
bindColumn ( ) |
綁定一個PHP變量到結果集中的輸出列 |
bindParam ( ) |
綁定一個PHP變量到一個預處理語句中的參數 |
bindValue ( ) |
綁定一個值到與處理語句中的參數 |
closeCursor( ) |
關閉遊標,使語句能夠再次執行 |
columnCount ( ) |
返回結果集中的列的數量 |
errorCode( ) |
從語句中返回一個錯誤代號,若是有的話 |
errorInfo( ) |
從語句中返回一個包含錯誤信息的數組,若是有的話 |
execute ( ) |
執行一條預處理語句 |
fetch( ) |
從結果集中取出一行 |
fetchAll( ) |
從結構集中取出一個包含了全部行的數組 |
fetchColumn ( ) |
返回結果集中某一列中的數據 |
getAttribute( ) |
返回一個 PDOStatement 屬性 |
getColumnMeta( ) |
返回結果集中某一列的結構(metadata?) |
nextRowset( ) |
返回下一結果集 |
rowCount( ) |
返回SQL語句執行後影響的行數 |
setAttribute( ) |
設置一個PDOStatement屬性 |
setFetchMode( ) |
爲 PDOStatement 設定獲取數據的方式 |
一、建立PDO對象
二、準備SQL語句
$sql="INSERT INTO users VALUES(:username,:userpassword,:userrole)";
$sql="INSERT INTO users VALUES(?,?,?)";
三、返回PDOStatement對象
$stmt=$pdo->prepare($sql);
四、綁定參數
$stmt->bindParam ( 'username', $name ); //命名參數綁定 $stmt->bindParam(1, $name); //?佔位符綁定 $name = 'soon'; //變量值
五、執行查詢
$stmt->execute (array(":username"=>"andy",":userpassword"=>"andy123",":userrole"=>"訪客"));
或者(省略命名參數前的「: 」)
$stmt->execute (array("username"=>"andy1","userpassword"=>"andy123","userrole"=>"訪客"));
1-5步驟完整參考代碼:
$option = array ( PDO::ATTR_PERSISTENT => TRUE, PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION, PDO::ATTR_ORACLE_NULLS => true ); try { // 1.建立PDO對象 $pdo = new PDO ( 'mysql:dbname=football;host=localhost', 'root', 'rootkit', $option ); // 2.準備SQL語句 $sql = "INSERT INTO users(username,userpassword,userrole) VALUES(:username,:userpassword,:userrole)"; // $sql="INSERT INTO users(username,userpassword,userrole) VALUES(?,?,?,?)"; // 3.返回PDOStatement對象 $stmt = $pdo->prepare ( $sql ); // 4.綁定參數(使用命名參數做爲佔位符) // $stmt->bindParam ( 'username', $name ); // $stmt->bindParam ( 'userpassword', $pwd ); // $stmt->bindParam ( 'userrole', $role ); // 5.執行查詢 $stmt->execute ( array ( "username" => "andy2", "userpassword" => "andy123", "userrole" => "訪客" ) ); echo '受影響行數:'.$stmt->rowCount(); echo '<br>新增訪客編號爲:'.$pdo->lastInsertId(); } catch ( PDOException $e ) { echo '數據庫操做失敗:' . $e->getMessage (); exit (); }
六、獲取數據
以上兩種方式執行SELECT查詢都是獲得相同的結果集對象PDOStatement。
6.一、fetch()方法獲取數據
PDO::FETCH_NUM: returns an array indexed by column number as returned in your result set, starting at column 0.
PDO::FETCH_ASSOC: returns an array indexed by column name as returned in your result set.
PDO::FETCH_BOTH (default): returns an array indexed by both column name and 0-indexed column number as returned in your result set.
PDO::FETCH_BOUND: returns TRUE and assigns the values of the columns in your result set to the PHP variables to which they were bound with the PDOStatement::bindColumn() method.
PDO::FETCH_LAZY: combines PDO::FETCH_BOTH and PDO::FETCH_OBJ, creating the object variable names as they are accessed.
PDO::FETCH_OBJ: returns an anonymous object with property names that correspond to the column names returned in your result set
示例代碼:
$option = array ( PDO::ATTR_PERSISTENT => TRUE, PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION, PDO::ATTR_ORACLE_NULLS => true ); try { $pdo = new PDO ( 'mysql:dbname=football;host=localhost', 'root', 'rootkit', $option ); // 查詢 $sql = "SELECT * FROM users"; // $stmt=$pdo->query($sql); $stmt = $pdo->prepare ( $sql ); $stmt->execute (); echo "一共{$stmt->rowCount()}條記錄<br>"; echo "id---account---pwd---role<br>"; // foreach ( $stmt as $row ) { // echo "{$row['id']},{$row['username']},{$row['userpassword']},{$row['userrole']}<br>"; // } // while ($arr=$stmt->fetch(PDO::FETCH_NUM)){ // echo $arr[0].'---'; // echo $arr[1].'---'; // echo $arr[2].'---'; // echo $arr[3].'<br>'; // } // while ( $arr = $stmt->fetch ( PDO::FETCH_ASSOC ) ) { // echo $arr ['id'] . '---'; // echo $arr ['username'] . '---'; // echo $arr ['userpassword'] . '---'; // echo $arr ['userrole'] . '<br>'; // } // while (list($id,$name,$pwd,$role)=$stmt->fetch(PDO::FETCH_NUM)){ // echo "{$id}---{$name}---{$pwd}---{$role}<br>"; // } $obj = $stmt->fetch ( PDO::FETCH_OBJ ); var_dump($obj); } catch ( PDOException $e ) { echo '數據庫操做失敗:' . $e->getMessage (); exit (); }
6.二、fetchall()方法獲取數據
調用一次得到結果集中的全部行。並返回二維數組。
示例代碼:
$option = array ( PDO::ATTR_PERSISTENT => TRUE, PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION, PDO::ATTR_ORACLE_NULLS => true ); try { $pdo = new PDO ( 'mysql:dbname=football;host=localhost', 'root', 'rootkit', $option ); // 查詢 $sql = "SELECT * FROM users"; $stmt = $pdo->prepare ( $sql ); $stmt->execute (); $allRows=$stmt->fetchAll(PDO::FETCH_ASSOC); echo "一共{$stmt->rowCount()}條記錄<br>"; echo "id---account---pwd---role<br>"; foreach ($allRows as $row){ echo "{$row['id']}---{$row['username']}---{$row['userpassword']}---{$row['userrole']}<br>"; } } catch ( PDOException $e ) { echo '數據庫操做失敗:' . $e->getMessage (); exit (); }
6.三、setFetchMode()方法獲取數據
PDOStatment對象調用setFetchMode()設置fetch和fetchall方法的數據引用方式,fetch和fetchall方法就無需另行單獨設置。適用用屢次調用fetch和fetchall方法的狀況。
6.四、bindColum()方法獲取數據
注意點:fetch方法的數據應用方式要設置爲PDO::FETCH_BOUND
示例代碼:
$option = array ( PDO::ATTR_PERSISTENT => TRUE, PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION, PDO::ATTR_ORACLE_NULLS => true ); try { $pdo = new PDO ( 'mysql:dbname=football;host=localhost', 'root', 'rootkit', $option ); // 查詢 $sql = "SELECT * FROM users"; $stmt = $pdo->prepare ( $sql ); $stmt->setFetchMode(PDO::FETCH_BOUND); $stmt->execute (); $stmt->bindColumn(1, $id); $stmt->bindColumn(2, $name); $stmt->bindColumn("userpassword", $pwd); $stmt->bindColumn("userrole", $role); while($stmt->fetch()){ echo "{$id}---{$name}---{$pwd}---{$role}<br>"; } } catch ( PDOException $e ) { echo '數據庫操做失敗:' . $e->getMessage (); exit (); }
6.五、獲取數據列的屬性信息
$pdo = new PDO ( 'mysql:dbname=football;host=localhost', 'root', 'rootkit', $option ); // 查詢 $sql = "SELECT * FROM users"; $stmt = $pdo->prepare ( $sql ); $stmt->execute (); echo 'users表中總共有:'.$stmt->columnCount().'個字段'; var_dump($stmt->getColumnMeta(0));//獲取某個字段詳細信息
提交文件表單設計:
<form action="action.php" method="post" enctype="multipart/form-data"> <!-- 隱藏域,設置圖片大小 --> <input type="hidden" name="MAX_FILE_SIZE" value="1000000"> <p>選擇文件: <input type="file" name="myfile"></p> <p>文件描述:<input type="text" name="description"></p> <p><input type="submit" value="上傳"></p> </form>
文件上傳處理
$allowtype = array ( "gif", "png", "jpg", "jpeg" ); // 設置充許上傳的類型爲gif, png, jpg,jpeg $size = 1000000; // 設置充許大小爲1M(1000000字節)之內的文件 $path = "./uploads"; // 設置上傳後保存文件的路徑,指定當前目錄下的uploads目錄 /* 判斷文件是否能夠成功上傳到服務器,$_FILES['myfile']['error']值爲0表示上傳成功 ,其它值則出錯 */ if ($_FILES ['myfile'] ['error'] > 0) { echo '上傳錯誤: '; switch ($_FILES ['myfile'] ['error']) { case 1 : die ( '上傳文件大小超出了PHP配置文件中的約定值:upload_max_filesize' ); case 2 : die ( '上傳文件大小超出了表單中的約定值:MAX_FILE_SIZE' ); case 3 : die ( '文件只被部分上載' ); case 4 : die ( '沒有上傳任何文件' ); default : die ( '未知錯誤' ); } } /* 判斷上傳的文件是否爲充許的文件類型 */ // 文件名轉數組,第一個元素文件名,第二個元素擴展名 $fileNameArray = explode ( ".", $_FILES ['myfile'] ['name'] ); // 輸出文件名數組最後一個元素 $hz = strtolower ( array_pop ( $fileNameArray ) ); /* 經過判斷文件的後綴方式,來決定文件是不是充許上傳的文件類型 */ if (! in_array ( $hz, $allowtype )) { die ( "這個後綴是<b>" . $hz . "</b>, 不是充許的文件類型!" ); } /* * 也能夠經過獲取上傳文件的MIME類型中的主類型和子類型,來限制文件上傳的類型 * list($maintype,$subtype)=explode("/",$_FILES['myfile']['type']); * if ($maintype=="text") { //經過主類型限制不能上傳文本文件,例如.txt .html .php等文件 * die('問題: 不能上傳文本文件。'); //若是用戶上傳文本文件則退出程序 * } */ /* 判斷上傳的文件是否爲充許尺寸範圍內 */ if ($_FILES ['myfile'] ["size"] > $size) { die ( "超過了充許的<b>{$size}<b>字節大小!" ); } /* 爲了系統安全,也爲了同名文件會被覆蓋,上傳後將文件名使用系統定義 */ $filename = date ( "YmdHis" ) . rand ( 100, 999 ) . "." . $hz; /* 判斷是否爲上傳文件 */ if (is_uploaded_file ( $_FILES ['myfile'] ['tmp_name'] )) { // 移動文件:從臨時空間轉移到目標位置 // if (! move_uploaded_file ( $_FILES ['myfile'] ["tmp_name"], $path . '/' . $filename )) { // die ( '問題: 不能將文件移動到指定目錄。' ); // } //圖片插入到數據庫 $option = array ( PDO::ATTR_PERSISTENT => TRUE, PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION, PDO::ATTR_ORACLE_NULLS => true ); try { $pdo = new PDO ( 'mysql:dbname=football;host=localhost', 'root', 'rootkit', $option ); // 查詢 $sql = "INSERT INTO images(contenttype,imagedata,description) VALUES(:contenttype,:imagedata,:description)"; $stmt = $pdo->prepare ( $sql ); $fp=fopen( $_FILES ['myfile'] ["tmp_name"], 'rb');//打開上傳的文件 $stmt->bindParam("contenttype", $_FILES ['myfile'] ["type"]); $stmt->bindParam("imagedata", $fp,PDO::PARAM_LOB); $stmt->bindParam("description", $_POST['description']); $stmt->execute (); } catch ( PDOException $e ) { echo '數據庫操做失敗:' . $e->getMessage (); exit (); } } else { die ( "問題: 上傳文件{$_FILES['myfile']['name']}不是一個合法文件!" ); } /* 若是文件上傳成功則輸出 */ //echo "文件{$filename}上傳成功,保存在目錄{$path}中,大小爲{$_FILES['myfile']['size']}字節"; echo "圖片保存數據庫成功";
讀取大對象數據
$option = array ( PDO::ATTR_PERSISTENT => TRUE, PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION, PDO::ATTR_ORACLE_NULLS => true ); try { $pdo = new PDO ( 'mysql:dbname=football;host=localhost', 'root', 'rootkit', $option ); $sql = "SELECT contenttype,imagedata,description FROM images WHERE id=:id"; $stmt = $pdo->prepare ( $sql ); $stmt->bindParam("id", $id); $id=2; $stmt->execute (); list($type,$lob,$des)=$stmt->fetch(); header("Content-type:$type"); echo $lob; } catch ( PDOException $e ) { echo '數據庫操做失敗:' . $e->getMessage (); exit (); }
<?php $pdo = new PDO ( "mysql:host=localhost;dbname=mybank", "root", "rootkit" ); $pdo->setAttribute ( PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION ); // 設置異常處理模式 $pdo->setAttribute ( PDO::ATTR_AUTOCOMMIT, 0 ); // 關閉自動提交 try { $money = 8000; // 轉帳金額 $pdo->beginTransaction (); // 開始事務 $affected_rows = $pdo->exec ( "UPDATE bank1 SET amount=amount-{$money} WHERE id=1120553244123" ); // 張三帳戶轉出 if ($affected_rows > 0) { echo "張三帳戶成功轉出{$money}元人民幣<br>"; } else { throw new PDOException ( '張三轉出失敗' ); // 失敗拋出異常,不向下再執行,轉到catch區塊 } $affected_rows = $pdo->exec ( "UPDATE bank2 SET amount=amount+{$money} WHERE id=2234753244567" ); // 李四帳戶轉入 if ($affected_rows > 0) { echo "李四帳戶成功轉入{$money}元人民幣<br>"; } else { throw new PDOException ( '李四帳戶轉入失敗' ); // 失敗拋出異常,不向下再執行,轉到catch區塊 } echo "交易成功!"; $pdo->commit (); // 若是執行到此處表示前面兩個查詢執行成功,整個事務執行成功 } catch ( PDOException $e ) { echo "交易失敗:" . $e->getMessage (); $pdo->rollback (); // 若是執行到此處理表示事務中的語句出問題了, 整個事務所有撤消 } $pdo->setAttribute ( PDO::ATTR_AUTOCOMMIT, 1 ); //從新開啓自動提交
需求:世界盃亞洲區賽程信息管理
按照MVC模式實現如下用例:
一、系統角色:管理員,普通用戶。
二、用例圖
三、登錄界面:
四、管理員登錄後管理界面
五、管理員添加賽程信息
六、管理員修改賽程信息
七、普通用戶登錄後操做界面
如下常量由PHP_PDO擴展模塊定義,所以只有在本擴展的模塊被編譯到PHP中,或者在運行時被動態加載後纔有效。
注意: PDO使用類常量自PHP 5.1。之前的版本使用的全局常量形式PDO_PARAM_BOOL中。
PDO::PARAM_BOOL (integer) |
表示布爾數據類型。 |
PDO::PARAM_NULL (integer) |
表示 SQL 中的 NULL 數據類型。 |
PDO::PARAM_INT (integer) |
表示 SQL 中的整型。 |
PDO::PARAM_STR (integer) |
表示 SQL 中的 CHAR、VARCHAR 或其餘字符串類型。 |
PDO::PARAM_LOB (integer) |
表示 SQL 中大對象數據類型。 |
PDO::PARAM_STMT (integer) |
表示一個記錄集類型。當前還沒有被任何驅動支持。 |
PDO::PARAM_INPUT_OUTPUT (integer) |
指定參數爲一個存儲過程的 INOUT 參數。必須用一個明確的 PDO::PARAM_* 數據類型跟此值進行按位或。 |
PDO::FETCH_LAZY (integer) |
指定獲取方式,將結果集中的每一行做爲一個對象返回,此對象的變量名對應着列名。PDO::FETCH_LAZY 建立用來訪問的對象變量名。在 PDOStatement::fetchAll() 中無效。 |
PDO::FETCH_ASSOC (integer) |
指定獲取方式,將對應結果集中的每一行做爲一個由列名索引的數組返回。若是結果集中包含多個名稱相同的列,則PDO::FETCH_ASSOC每一個列名只返回一個值。 |
PDO::FETCH_NAMED (integer) |
指定獲取方式,將對應結果集中的每一行做爲一個由列名索引的數組返回。若是結果集中包含多個名稱相同的列,則PDO::FETCH_ASSOC每一個列名 返回一個包含值的數組。 |
PDO::FETCH_NUM (integer) |
指定獲取方式,將對應結果集中的每一行做爲一個由列號索引的數組返回,從第 0 列開始。 |
PDO::FETCH_BOTH (integer) |
指定獲取方式,將對應結果集中的每一行做爲一個由列號和列名索引的數組返回,從第 0 列開始。 |
PDO::FETCH_OBJ (integer) |
指定獲取方式,將結果集中的每一行做爲一個屬性名對應列名的對象返回。 |
PDO::FETCH_BOUND (integer) |
指定獲取方式,返回 TRUE 且將結果集中的列值分配給經過 PDOStatement::bindParam() 或 PDOStatement::bindColumn() 方法綁定的 PHP 變量。 |
PDO::FETCH_COLUMN (integer) |
指定獲取方式,從結果集中的下一行返回所須要的那一列。 |
PDO::FETCH_CLASS (integer) |
指定獲取方式,返回一個所請求類的新實例,映射列到類中對應的屬性名。 注意: 若是所請求的類中不存在該屬性,則調用 __set() 魔術方法 |
PDO::FETCH_INTO (integer) |
指定獲取方式,更新一個請求類的現有實例,映射列到類中對應的屬性名。 |
PDO::FETCH_FUNC (integer) |
容許在運行中徹底用自定義的方式處理數據。(僅在 PDOStatement::fetchAll() 中有效)。 |
PDO::FETCH_GROUP (integer) |
根據值分組返回。一般和 PDO::FETCH_COLUMN 或 PDO::FETCH_KEY_PAIR 一塊兒使用。 |
PDO::FETCH_UNIQUE (integer) |
只取惟一值。 |
PDO::FETCH_KEY_PAIR (integer) |
獲取一個有兩列的結果集到一個數組,其中第一列爲鍵名,第二列爲值。自 PHP 5.2.3 起可用。 |
PDO::FETCH_CLASSTYPE (integer) |
根據第一列的值肯定類名。 |
PDO::FETCH_SERIALIZE (integer) |
相似 PDO::FETCH_INTO ,可是以一個序列化的字符串表示對象。自 PHP 5.1.0 起可用。從 PHP 5.3.0 開始,若是設置此標誌,則類的構造函數從不會被調用。 |
PDO::FETCH_PROPS_LATE (integer) |
設置屬性前調用構造函數。自 PHP 5.2.0 起可用。 |
PDO::ATTR_AUTOCOMMIT (integer) |
若是此值爲 FALSE ,PDO 將試圖禁用自動提交以便數據庫鏈接開始一個事務。 |
PDO::ATTR_PREFETCH (integer) |
設置預取大小來爲你的應用平衡速度和內存使用。並不是全部的數據庫/驅動組合都支持設置預取大小。較大的預取大小致使性能提升的同時也會佔用更多的內存。 |
PDO::ATTR_TIMEOUT (integer) |
設置鏈接數據庫的超時秒數。 |
PDO::ATTR_ERRMODE (integer) |
關於此屬性的更多信息請參見 錯誤及錯誤處理 部分。 |
PDO::ATTR_SERVER_VERSION (integer) |
此爲只讀屬性;返回 PDO 所鏈接的數據庫服務的版本信息。 |
PDO::ATTR_CLIENT_VERSION (integer) |
此爲只讀屬性;返回 PDO 驅動所用客戶端庫的版本信息。 |
PDO::ATTR_SERVER_INFO (integer) |
此爲只讀屬性。返回一些關於 PDO 所鏈接的數據庫服務的元信息。 |
PDO::ATTR_CONNECTION_STATUS (integer) |
|
PDO::ATTR_CASE (integer) |
用相似 PDO::CASE_* 的常量強制列名爲指定的大小寫。 |
PDO::ATTR_CURSOR_NAME (integer) |
獲取或設置使用遊標的名稱。當使用可滾動遊標和定位更新時候很是有用。 |
PDO::ATTR_CURSOR (integer) |
選擇遊標類型。 PDO 當前支持 PDO::CURSOR_FWDONLY 和 PDO::CURSOR_SCROLL。通常爲 PDO::CURSOR_FWDONLY,除非確實須要一個可滾動遊標。 |
PDO::ATTR_DRIVER_NAME (string) |
返回驅動名稱。 使用 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) |
在獲取數據時將空字符串轉換成 SQL 中的 NULL 。 |
PDO::ATTR_PERSISTENT (integer) |
請求一個持久鏈接,而非建立一個新鏈接。關於此屬性的更多信息請參見 鏈接與鏈接管理 。 |
PDO::ATTR_STATEMENT_CLASS (integer) |
|
PDO::ATTR_FETCH_CATALOG_NAMES (integer) |
將包含的目錄名添加到結果集中的每一個列名前面。目錄名和列名由一個小數點分開(.)。此屬性在驅動層面支持,因此有些驅動可能不支持此屬性。 |
PDO::ATTR_FETCH_TABLE_NAMES (integer) |
將包含的表名添加到結果集中的每一個列名前面。表名和列名由一個小數點分開(.)。此屬性在驅動層面支持,因此有些驅動可能不支持此屬性。 |
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) |
若是發生錯誤,則不顯示錯誤或異常。但願開發人員顯式地檢查錯誤。此爲默認模式。關於此屬性的更多信息請參見 錯誤與錯誤處理 。 |
PDO::ERRMODE_WARNING (integer) |
若是發生錯誤,則顯示一個 PHP E_WARNING 消息。關於此屬性的更多信息請參見 錯誤與錯誤處理。 |
PDO::ERRMODE_EXCEPTION (integer) |
若是發生錯誤,則拋出一個 PDOException 異常。關於此屬性的更多信息請參見 錯誤與錯誤處理。 |
PDO::CASE_NATURAL (integer) |
保留數據庫驅動返回的列名。 |
PDO::CASE_LOWER (integer) |
強制列名小寫。 |
PDO::CASE_UPPER (integer) |
強制列名大寫。 |
PDO::NULL_NATURAL (integer) |
|
PDO::NULL_EMPTY_STRING (integer) |
|
PDO::NULL_TO_STRING (integer) |
|
PDO::FETCH_ORI_NEXT (integer) |
在結果集中獲取下一行。僅對可滾動遊標有效。 |
PDO::FETCH_ORI_PRIOR (integer) |
在結果集中獲取上一行。僅對可滾動遊標有效。 |
PDO::FETCH_ORI_FIRST (integer) |
在結果集中獲取第一行。僅對可滾動遊標有效。 |
PDO::FETCH_ORI_LAST (integer) |
在結果集中獲取最後一行。僅對可滾動遊標有效。 |
PDO::FETCH_ORI_ABS (integer) |
根據行號從結果集中獲取須要的行。僅對可滾動遊標有效。 |
PDO::FETCH_ORI_REL (integer) |
根據當前遊標位置的相對位置從結果集中獲取須要的行。僅對可滾動遊標有效。 |
PDO::CURSOR_FWDONLY (integer) |
建立一個只進遊標的 PDOStatement 對象。此爲默認的遊標選項,由於此遊標最快且是 PHP 中最經常使用的數據訪問模式。 |
PDO::CURSOR_SCROLL (integer) |
建立一個可滾動遊標的 PDOStatement 對象。經過 PDO::FETCH_ORI_* 常量來控制結果集中獲取的行。 |
PDO::ERR_NONE (string) |
對應 SQLSTATE '00000',表示 SQL 語句沒有錯誤或警告地成功發出。當用 PDO::errorCode() 或 PDOStatement::errorCode() 來肯定是否有錯誤發生時,此常量很是方便。在檢查上述方法返回的錯誤狀態代碼時,會常常用到。 |
PDO::PARAM_EVT_ALLOC (integer) |
分配事件 |
PDO::PARAM_EVT_FREE (integer) |
解除分配事件 |
PDO::PARAM_EVT_EXEC_PRE (integer) |
執行一條預處理語句以前觸發事件。 |
PDO::PARAM_EVT_EXEC_POST (integer) |
執行一條預處理語句以後觸發事件。 |
PDO::PARAM_EVT_FETCH_PRE (integer) |
從一個結果集中取出一條結果以前觸發事件。 |
PDO::PARAM_EVT_FETCH_POST (integer) |
從一個結果集中取出一條結果以後觸發事件。 |
PDO::PARAM_EVT_NORMALIZE (integer) |
在綁定參數註冊容許驅動程序正常化變量名時觸發事件。 |