對於php查詢Mysql資料函式庫的model.php寫法還不夠完善,在每個方法中還需要自己宣告mysql的$con對象,同時自己關閉 mysql的$con對象。這樣,如果查詢方法一多,再無緣無故地增加了許多聲明$con物件與關閉$con物件的程式碼。其實完全可以利用php的建構函 數與析構函數給資料庫類別各個查詢方法的注入$con對象,同時自動在每次查詢之後自動回收$con對象。
直接舉一個例子來說明這個問題,首先我們的任務很簡單,就是把mysql中test資料庫的testtable表,依照date時間類別降序排序的結果查詢到網頁上。
如下圖:
首先,我們寫一個model.php如下,
先宣告一個私有的類別成員$con作為這個類別的全域變數。
可以把建立資料庫連線的程式碼放在testtable這個資料庫查詢類別的建構子construct()裡面,把關閉資料庫連線的程式碼放在析構函 數destruct()裡面,其中construct()與destruct()是php中的函數名保留關鍵字,也就是一旦宣告這兩個函數, 就被認為是建構子與析構函數。
值得注意的是,要為宣告的私有類別成員$con賦值,必須用$this->con的形式。不可以直接$con=xx,如果是$con=xx,php認為這個變數的作用範圍只在目前函數內,不能作用於整個類別。
建構函數,要求一個變數$databaseName,此乃呼叫者需要查詢的資料庫名稱。
<?php class testtable{ private $con; function construct($databaseName){ $this->con=mysql_connect("localhost","root","root"); if(!$this->con){ die("连接失败!"); } mysql_select_db($databaseName,$this->con); mysql_query("set names utf8;"); } public function getAll(){ $result=mysql_query("select * from testtable order by date desc;"); $testtableList=array(); for($i=0;$row=mysql_fetch_array($result);$i++){ $testtableList[$i]['id']=$row['id']; $testtableList[$i]['username']=$row['username']; $testtableList[$i]['number']=$row['number']; $testtableList[$i]['date']=$row['date']; } return $testtableList; } function destruct(){ mysql_close($this->con); } } ?>
搞完畢之後,getAll()這個資料庫查詢類別的查詢方法,無須聲明資料庫連接與關閉資料庫連接,直接就可以進行查詢,查詢完有析構函數進行回收。
在controller.php中先引入這個testtable查詢類,再進行getAll()方法的調用,則得到如上圖的效果:
<?php header("Content-type: text/html; charset=utf-8"); include_once("model.php"); $testtable=new testtable("test"); $testtableList=$testtable->getAll(); echo "<table>"; for($i=0;$i<count($testtableList);$i++){ echo "<tr> <td>".$testtableList[$i]['id']."</td> <td>".$testtableList[$i]['username']."</td> <td>".$testtableList[$i]['number']."</td> <td>".$testtableList[$i]['date']."</td> </tr>"; } echo "</table>"; ?>
以上是利用php的建構子與析構函式編寫Mysql資料庫查詢類別的範例程式碼的詳細內容。更多資訊請關注PHP中文網其他相關文章!