標籤:資料庫 php database mysql
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。我可以這麼測試
<?php$host = 'localhost';$username = 'root';$password = 'root';if($conn = mysql_connect($host,$username,$password)){echo "串連MySQL伺服器成功";}else{echo "串連失敗";}
2、選擇資料庫bool mysql_select_db(string database_name[,resource link_identifier]);第一個參數database_name是要串連的資料庫名。第二個參數link_identifier是資料庫連接標識,也就是上面串連MySQL伺服器成功後返回的值。如果不寫,預設為上一次開啟的資料庫連接。建議寫。成功返回true,失敗返回false。比如我需要串連我上次建立的那個test資料庫,我可以這麼寫:
<?php$host = 'localhost';$username = 'root';$password = 'root';$database_name = 'test';$conn = mysql_connect($host,$username,$password);if(mysql_select_db($database_name,$conn)){echo "資料庫連接成功";}else{echo "串連失敗";}
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。比如我想查詢現在我的表裡有什麼資料,我可以這麼寫。
<span style="font-size:14px;"><?php$host = 'localhost';$username = 'root';$password = 'root';$database_name = 'test';$conn = mysql_connect($host,$username,$password);mysql_select_db($database_name,$conn);$sql = "select * from tb_student;";$query = mysql_query($sql,$conn);while($res = mysql_fetch_assoc($query)){echo $res['id'].'--'.$res['name'].'--'.$res['email'].'--'.$res['address'].'--'.$res['age'].'<br>';}</span>
增刪改不舉例了,就是把SQL語句換了。然後返回的true或false。不用再取結果集。4、關閉結果集mysql_free_result(resource $res);比如上面我用完之後就可以關閉結果集了,mysql_free_result($query);5、斷開與資料庫連接mysql_close(resource $link_identifier);比如上面程式最後我就可以中斷連線了,mysql_close($conn);三、這裡給出綜合案例
<?php //mysql擴充庫操作資料庫步驟如下 //1.擷取串連 $conn = mysql_connect("localhost","root","root"); if(!$conn){ die("串連失敗".mysql_error); } //2.選擇資料庫 mysql_select_db("mr_mysql"); //3.設定作業編碼(建議有) mysql_query("set names utf8"); //4.發送指令sql (ddl【資料定義語句】 ,dml【 資料動作陳述式,如update,insert,delete】,dql【 select】 ,dtl【資料事務語句 rollback commit】) $sql = "select * from mr_user;"; $res = mysql_query($sql,$conn);//返回的資料‘指標’不是指到了第一行,而是指到第一行的前一行,也就是第0行。 //var_dump($res); //5.接收返回的結果,並處理 while($row = mysql_fetch_row($res)){ //mysql_fetch_row()是返回結果集的下一行並賦值給$row //$row 是一個數組 //第一種取法:$row[i] echo "<br>"; //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擴充庫操作資料庫。
邊記邊學PHP-(十六)PHP使用MySQL擴充庫操作資料庫