PHP提供了很多擴充庫,這裡說的是使用MySQL擴充庫,但是這種擴充庫在不久的將來就會被摒棄,因為如果使用MySQL擴充庫編寫的代碼在啟動並執行時候會有warning的提示。我本來想直接寫另一種,但是感覺這是基礎。MySQL擴充庫,一說到庫,自然而然就想到是一堆函數,很多函數組成一個庫,使用擴充庫也就是使用裡面的函數。MySQL擴充庫是完全面向過程的,顯然不符合物件導向的特性,被摒棄也是可以理解的。廢話不多說,直接上重點。
一、PHP使用MySQL擴充庫操作資料庫的
此圖是我自己畫的,可能有不準確的地方。
可以看到使用MySQL操作資料庫大致經過五步:
1、串連MySQL伺服器
這裡使用的函數是mysql_connect()函數
2、選擇資料庫
這裡使用的是mysql_select_db();函數
3、執行SQL語句
這裡使用mysql_query()函數。所謂的SQL語句就是增刪改查操作。
4、關閉結果集
這裡使用mysql_free_result();函數,釋放系統資源
5、斷開與伺服器的串連
這裡使用mysql_close();函數
二、細說五步
1、串連MySQL伺服器
mysql_connect()函數的文法如下:
resource mysql_connect([string server[,string username[,string password[,bool new_link[,int client_flags]]]]]);
這是最完整的函數參數,但是我們在用的時候就只是用前三個參數就好了。
第一個server指的是MySQL伺服器,可以使用預設的localhost。
第二個username就是在安裝資料庫的時候自己設定的使用者名稱,我們預設的是root。
第三個password就是資料庫的密碼。
如果串連成功會返回一個MySQL串連標識,失敗則返回false。
比如我串連我自己的資料庫,我的伺服器為localhost,使用者名稱為root,密碼為root。我可以這麼測試
2、選擇資料庫
bool mysql_select_db(string database_name[,resource link_identifier]);
第一個參數database_name是要串連的資料庫名。
第二個參數link_identifier是資料庫連接標識,也就是上面串連MySQL伺服器成功後返回的值。如果不寫,預設為上一次開啟的資料庫連接。建議寫。
成功返回true,失敗返回false。
比如我需要串連我上次建立的那個test資料庫,我可以這麼寫:
3、執行SQL語句
所謂SQL語句就是對資料庫進行的增刪改查操作。在使用命令列操作資料庫的時候已經介紹了。函數文法如下:
resource mysql_query(string query[,resource link_identifier]);
第一個參數就是需要執行的sql語句。
第二個參數是mysql_connect返回的串連標識。建議寫。
sql語句分為ddl【資料定義語句】 ,dml【 資料動作陳述式,如update,insert,delete】,dql【 select】 ,dtl【資料事務語句 rollback commit】,這裡面最常用的就是dql語句,也就是查詢語句。在執行dql語句成功後返回的是一個“資料指標”,在執行dml語句成功後返回的是true,失敗都返回false。
比如我想查詢現在我的表裡有什麼資料,我可以這麼寫。
';}
增刪改不舉例了,就是把SQL語句換了。然後返回的true或false。不用再取結果集。
4、關閉結果集
mysql_free_result(resource $res);
比如上面我用完之後就可以關閉結果集了,mysql_free_result($query);
5、斷開與資料庫連接
mysql_close(resource $link_identifier);
比如上面程式最後我就可以中斷連線了,mysql_close($conn);
三、這裡給出綜合案例
"; //echo "$row[0]--$row[1]--$row[2]--$row[3]--$row[4]"; //var_dump($row); //第二種取法 foreach($row as $key=>$value){ echo "$value--"; } } //6.釋放資源 mysql_free_result($res); mysql_close($conn); //這句可以不寫,建議寫
四、細節問題
1.使用完$res結果集後,一定要釋放資源
2.mysql_close()如果沒有的話,系統也會自動關閉
3.如果mysql_close放在了while前面,那麼不會影響結果,因為執行完mysql_query語句之後,程式已經把資料庫讀到記憶體,再次使用時是從記憶體讀取。但是如果mysql_free_result放在前面,那麼就會出錯。
4.$row是個數組
5.$res如果執行的是dql語句返回的是個資源類型,但是如果執行的是dml語句就會返回bool值
6.從$res擷取行資料的時候,除了mysql_fetch_row($res)[返回索引數組]還有三個方法:
mysql_fetch_assoc($res) --------返回一個關聯陣列
mysql_fetch_array($res) ---------返回索引數組和關聯陣列,很耗記憶體,建議不要使用
mysql_fetch_object($res) ---------把一行資料當成一個對象返回
至此使用MySQL擴充庫操作資料庫基本完成,這是後面使用Mysqli擴充庫操作資料庫的基礎,下一篇寫Mysqli擴充庫操作資料庫。