1 <?php 2 //1. 使用mysql函數鏈接mysql數據庫 3 /* mysql_connect(server,username,password) 返回資源標識符,若是隻有一個將做爲默認,多個則要用標識符區分 4 * mysql_close() 關閉鏈接 5 * mysql_error() 打印錯誤信息 6 * mysql_select_db(name,resource) 爲後續操做指定數據庫,至關於use xxx 7 * mysql_query() 執行語句,返回結果資源,錯誤返回0 8 * mysql_affected_rows() 上一條sql語句影響的行數 9 * 當mysql_query函數執行的是select語句時,返回的是PHP引用資源指針 10 * mysql_num_rows(resource) 返回記錄行個數 11 * mysql_num_fields(resource) 返回記錄列個數 12 * 如下函數用於讀取一行記錄直到末尾(NULL),每次讀取將指針移到下一行,使用mysql_data_seek()來實現移動指針 13 * mysql_fetch_row(resource) 返回一個普通索引數組保存一行數據,並將資源指針跳到下一行 14 * mysql_fetch_assoc(resource) 返回一個關聯索引數組保存一行數據,並將資源指針跳到下一行 15 * mysql_fetch_array(resource) 返回一個普通索引數組/關聯索引數組/二者(默認) 保存一行數據,並將資源指針跳到下一行 16 * mysql_fetch_object(resource) 返回一個對象保存一行數據,並將資源指針跳到下一行 17 * mysql_free_result(resource) 釋放結果資源 18 */ 19 //鏈接數據庫 20 $link = mysql_connect('localhost','root','root'); 21 if (!$link) { 22 die('鏈接失敗'.mysql_error()); 23 } else { 24 //顯示一些與mysql數據庫有關的信息 25 echo '鏈接成功<br/>'; 26 echo mysql_get_client_info()."<br/>"; 27 echo mysql_get_host_info()."<br/>"; 28 echo mysql_get_proto_info()."<br/>"; 29 echo mysql_get_server_info()."<br/>"; 30 echo mysql_client_encoding()."<br/>"; 31 echo mysql_stat()."<br/>"; 32 } 33 mysql_query('set names utf-8'); 34 35 //創建並使用數據庫bookstore 36 mysql_query("create database bookstore"); 37 mysql_select_db("bookstore", $link); 38 //增刪改 39 $create_str = " 40 create table if not exists books ( 41 id int not null auto_increment, 42 bookname varchar(80) not null default '', 43 publisher varchar(60) not null default '', 44 author varchar(20) not null default '', 45 price double(5,2) not null default 0.00, 46 ptime int not null default 0, 47 detail TEXT, 48 primary key(id), 49 index books_bookname(bookname), 50 index books_publisher(publisher), 51 index books_price(price) 52 );"; 53 $insert_str = " 54 insert into books(bookname,publisher,author,price,detail) values 55 ('PHP', '電子工業', '高某某', '80.00', '與PHP相關的書'), 56 ('JSP', '人民郵電', '洛某某', '60.00', '與JSP相關的書'), 57 ('ASP', '電子工業', '峯某某', '40.00', '與ASP相關的書');"; 58 $update_str = "update books set price = '79.90' where bookname = 'PHP';"; 59 $delete_str = "delete from books where bookname = 'JSP';"; 60 $res = mysql_query($create_str); 61 $res = mysql_query($insert_str); 62 $res = mysql_query($update_str); 63 $res = mysql_query($delete_str); 64 65 //查 66 $res = mysql_query("select * from books;"); 67 while(@$row = mysql_fetch_assoc($res)) { 68 print_r($row); 69 echo "<br/>"; 70 } 71 //關閉資源 72 mysql_free_result($res); 73 mysql_close($link); 74 75 //2. 使用PDO鏈接數據庫 76 /* 一種通用的鏈接數據庫的方式,爲不一樣的數據庫提供統一接口 77 * 構造方法 PDO(DSN,username,password,opts) DSN是數據源名,定義數據庫和用到的驅動程序,opts關聯數組可選,爲一些選項,後面會列舉 78 * PDO對象中的方法 79 * getAttribute,setAttribute 得倒以及設置屬性 80 * errorCode,errorInfo 錯誤碼和錯誤信息 81 * exec 處理一條語句,返回影響行數 82 * query 處理一條語句,返回PDOStatement 83 * quote 爲某個SQL字符串添加引號 84 * lastInsertId 獲取插入到表中的最後一條數據的主鍵值 85 * prepare 準備要執行的SQL語句 86 * getAvailableDrivers 獲取有效的PDO驅動器名稱 87 * beginTransaction 開始一個事務,標明迴歸起點 88 * commit 提交一個事務 89 * rollback 回滾一個事務 90 * 91 * query和prepare方法都會返回一個PDOStatement類的實例,該類能夠用來設置query參數以及得到query結果 92 * 預處理sql語句能夠提升執行效率,尤爲在一個查詢執行屢次是經常使用(和java中得preparestatement同樣),PDOStatemet的成員方法以下 93 * bindColumn 匹配列名和一個指定的變量名,獲取每行記錄時會將相應列值賦給該變量 94 * bindParam 將參數綁定到相應的查詢佔位符上 95 * bindValue 將一值綁定到對應的一個參數中 96 * closeCursor 關閉遊標 97 * columnCount,rowCount 結果集中列的數目,行的數目 98 * errorCode,errorInfo 錯誤碼,錯誤信息 99 * execute 執行一個準備好的預查詢 100 * setFetchMode 設置獲取結果集合的類型 101 * fetch 返回結果下一行 102 * fetchAll 得到全部行 103 * fetchColumn 返回下一行某列的值 104 * fetchObject 將下一行做爲對象返回 105 * getColumMeta 返回某一列的屬性信息 106 * nextRowset 檢索下一行集(結果集) 107 * getAttribute,setAttrbute 設置和獲得屬性 108 */ 109 try{ 110 $dbh = new PDO("mysql:host=localhost;dbname=bookstore", "root", "root"); 111 } catch(PDOException $e){ 112 echo $e->getMessage(); 113 } 114 //顯示一些經常使用選項 115 echo "<br>自動提交功能:".$dbh->getAttribute(PDO::ATTR_AUTOCOMMIT); 116 echo "<br>強制大小寫轉換:".$dbh->getAttribute(PDO::ATTR_CASE); 117 echo "<br>錯誤處理模式:".$dbh->getAttribute(PDO::ATTR_ERRMODE); 118 echo "<br>是否持久鏈接:";var_dump($dbh->getAttribute(PDO::ATTR_PERSISTENT)); 119 echo "<br>空字符串轉換爲NULL:".$dbh->getAttribute(PDO::ATTR_ORACLE_NULLS); 120 //echo "<br>提早獲取字符串大小:".$dbh->getAttribute(PDO::ATTR_PREFETCH); 這兩個屬性當前驅動不支持 121 //echo "<br>超時等待時間:".$dbh->getAttribute(PDO::ATTR_TIMEOUT); 122 echo "<br>數據庫服務器信息:".$dbh->getAttribute(PDO::ATTR_SERVER_INFO); 123 echo "<br>數據庫服務器版本:".$dbh->getAttribute(PDO::ATTR_SERVER_VERSION); 124 echo "<br>數據庫客戶端版本:".$dbh->getAttribute(PDO::ATTR_CLIENT_VERSION); 125 echo "<br>鏈接狀態信息:".$dbh->getAttribute(PDO::ATTR_CONNECTION_STATUS); 126 127 //使用exec執行非select操做 128 $res = $dbh->exec("update books set price = '78.80' where bookname = 'PHP';"); 129 echo "<br>exec操做影響的行數:".$res; 130 131 //使用query執行select操做 132 $res = $dbh->query("select * from books;"); 133 echo "<br>query操做影響的行數:".$res->rowCount(); 134 foreach ($res as $st) { 135 echo "<br>"; 136 print_r($st); 137 } 138 echo "<br><br>"; 139 140 //使用prepare和execute函數來執行語句 141 /* prepare能夠用兩種方式來使用佔位符 142 * 1)insert .. values (:name, :address, :phone); 143 * 2)insert .. values (?, ?); 144 * 相應的Bind方法也分爲兩種 145 * 1)bindParam(':name', "ss"); 146 * 2)bindParam(1, "ss"); 147 * 也能夠在execute中指定參數,分別爲關聯數組和索引數組 148 * 1)execute(array(":name"->ss .. )); 149 * 2)execute(array("ss", ..)) 150 * 151 */ 152 $stmt = $dbh->prepare("insert into books(bookname,publisher,author,price,detail) values (?,?,?,?,?)"); 153 $book_info = array("bookname"=>"JAVA", "publisher"=>"中國人民", 154 "author"=>"張某某","price"=>37.80, "detail"=>"與JAVA有關的書"); 155 $stmt->bindParam(1, $book_info['bookname']); //能夠顯式指定類型,BOOL,NULL,INT,STR,LOB(大數據) 156 $stmt->bindParam(2, $book_info['publisher']); 157 $stmt->bindParam(3, $book_info['author']); 158 $stmt->bindParam(4, $book_info['price']); 159 $stmt->bindParam(5, $book_info['detail']); 160 $stmt->execute(); 161 162 $stmt->execute(array("C++","工業機械","李某",45.30,"與C++有關的書")); 163 164 //使用prepare和execute來查詢 165 /* fetch([fetch_style,cursor_orientation,cursor_offset]) 返回一行數據,三個參數都是可選 166 * fetch_style PDO::FETCH_ASSOC(關聯),NUM(索引),OBJ(對象),BOTH(前二者,默認),LAZY(前三者),BOUND(賦值給bindParam中得變量) 167 * cursor_orientation 可滾動遊標時應該獲取哪一行 168 * cursor_offset 獲取的行相對於當前遊標位置的偏移 169 * 170 * fetchall([fetch_style,column_index]) 返回全部數據 171 * column_index返回指定列全部值 172 * 173 * setfetchmode 設定以上兩個函數的默認參數 174 * bindColumn 綁定列對應變量,每次fetch的數據會自動賦值到對應變量上 175 */ 176 177 $stmt = $dbh->prepare("select * from books"); 178 $stmt->execute(); 179 while (@$arr = $stmt->fetch()) { 180 print_r($arr); 181 echo "<br>"; 182 } 183 echo "<br>"; 184 $stmt->execute(); 185 print_r($stmt->fetchAll()); 186 187 //PDO事務處理 188 /* 在autocommit爲1時是不須要事務的,須要commit才能提交操做,爲0時須要事務來進行提交和回滾操做 189 * 若是驅動底層不支持事務,會拋出PDOException異常 190 */ 191 try{ 192 $dbh->beginTransaction(); 193 $dbh->exec("delete from books where bookname = 'JAVA';"); //這裏並無在數據庫中有所改動 194 $dbh->commit(); //這裏才被提交執行 195 } catch(PDOException $e){ 196 echo $e->getMessage(); 197 } 198 ?>
執行結果php
鏈接成功 mysqlnd 5.0.10 - 20111026 - $Id: e707c415db32080b3752b232487a435ee0372157 $ localhost via TCP/IP 10 5.5.32 utf8 Uptime: 4406 Threads: 1 Questions: 1676 Slow queries: 0 Opens: 63 Flush tables: 1 Open tables: 4 Queries per second avg: 0.380 Array ( [id] => 1 [bookname] => PHP [publisher] => 電子工業 [author] => 高某某 [price] => 79.90 [ptime] => 0 [detail] => 與PHP相關的書 ) Array ( [id] => 3 [bookname] => ASP [publisher] => 電子工業 [author] => 峯某某 [price] => 40.00 [ptime] => 0 [detail] => 與ASP相關的書 ) 自動提交功能:1 強制大小寫轉換:0 錯誤處理模式:0 是否持久鏈接:bool(false) 空字符串轉換爲NULL:0 數據庫服務器信息:Uptime: 4407 Threads: 1 Questions: 1686 Slow queries: 0 Opens: 65 Flush tables: 1 Open tables: 5 Queries per second avg: 0.382 數據庫服務器版本:5.5.32 數據庫客戶端版本:mysqlnd 5.0.10 - 20111026 - $Id: e707c415db32080b3752b232487a435ee0372157 $ 鏈接狀態信息:localhost via TCP/IP exec操做影響的行數:1 query操做影響的行數:2 Array ( [id] => 1 [0] => 1 [bookname] => PHP [1] => PHP [publisher] => 電子工業 [2] => 電子工業 [author] => 高某某 [3] => 高某某 [price] => 78.80 [4] => 78.80 [ptime] => 0 [5] => 0 [detail] => 與PHP相關的書 [6] => 與PHP相關的書 ) Array ( [id] => 3 [0] => 3 [bookname] => ASP [1] => ASP [publisher] => 電子工業 [2] => 電子工業 [author] => 峯某某 [3] => 峯某某 [price] => 40.00 [4] => 40.00 [ptime] => 0 [5] => 0 [detail] => 與ASP相關的書 [6] => 與ASP相關的書 ) Array ( [id] => 1 [0] => 1 [bookname] => PHP [1] => PHP [publisher] => 電子工業 [2] => 電子工業 [author] => 高某某 [3] => 高某某 [price] => 78.80 [4] => 78.80 [ptime] => 0 [5] => 0 [detail] => 與PHP相關的書 [6] => 與PHP相關的書 ) Array ( [id] => 3 [0] => 3 [bookname] => ASP [1] => ASP [publisher] => 電子工業 [2] => 電子工業 [author] => 峯某某 [3] => 峯某某 [price] => 40.00 [4] => 40.00 [ptime] => 0 [5] => 0 [detail] => 與ASP相關的書 [6] => 與ASP相關的書 ) Array ( [id] => 4 [0] => 4 [bookname] => JAVA [1] => JAVA [publisher] => 中國人民 [2] => 中國人民 [author] => 張某某 [3] => 張某某 [price] => 37.80 [4] => 37.80 [ptime] => 0 [5] => 0 [detail] => 與JAVA有關的書 [6] => 與JAVA有關的書 ) Array ( [id] => 5 [0] => 5 [bookname] => C++ [1] => C++ [publisher] => 工業機械 [2] => 工業機械 [author] => 李某 [3] => 李某 [price] => 45.30 [4] => 45.30 [ptime] => 0 [5] => 0 [detail] => 與C++有關的書 [6] => 與C++有關的書 ) Array ( [0] => Array ( [id] => 1 [0] => 1 [bookname] => PHP [1] => PHP [publisher] => 電子工業 [2] => 電子工業 [author] => 高某某 [3] => 高某某 [price] => 78.80 [4] => 78.80 [ptime] => 0 [5] => 0 [detail] => 與PHP相關的書 [6] => 與PHP相關的書 ) [1] => Array ( [id] => 3 [0] => 3 [bookname] => ASP [1] => ASP [publisher] => 電子工業 [2] => 電子工業 [author] => 峯某某 [3] => 峯某某 [price] => 40.00 [4] => 40.00 [ptime] => 0 [5] => 0 [detail] => 與ASP相關的書 [6] => 與ASP相關的書 ) [2] => Array ( [id] => 4 [0] => 4 [bookname] => JAVA [1] => JAVA [publisher] => 中國人民 [2] => 中國人民 [author] => 張某某 [3] => 張某某 [price] => 37.80 [4] => 37.80 [ptime] => 0 [5] => 0 [detail] => 與JAVA有關的書 [6] => 與JAVA有關的書 ) [3] => Array ( [id] => 5 [0] => 5 [bookname] => C++ [1] => C++ [publisher] => 工業機械 [2] => 工業機械 [author] => 李某 [3] => 李某 [price] => 45.30 [4] => 45.30 [ptime] => 0 [5] => 0 [detail] => 與C++有關的書 [6] => 與C++有關的書 ) )