FleaPHP 開發指南 - 6. 訪問資料庫

來源:互聯網
上載者:User
訪問|開發指南|資料|資料庫

這一章我們就來看看 FleaPHP 的資料庫訪問功能。體驗一下 FleaPHP 出色的自動化 CRUD 能力。


串連資料庫

在 htdocs 目錄中建立子目錄 testDB,並在子目錄下建立檔案 test1.php 檔案,內容如下:

<?phprequire('../FLEA/FLEA.php');__FLEA_PREPARE();// 準備資料庫連接資訊$dsn = array(    'driver'        => 'mysql',    'host'          => 'localhost',    'login'         => 'root',    'password'      => '',    'database'      => 'test',);// 擷取資料庫訪問對象$dbo =& get_dbo($dsn);// 串連到資料庫if ($dbo->connect()) {    echo 'Connect to database successed.';}?>

請注意這裡我們沒有調用 run() 函數。因此我們需要調用 __FLEA_PREPARE() 函數來初始化 FleaPHP 運行環境。並且 __FLEA_PREPARE() 函數應該在用 register_app_inf() 或 set_app_inf() 修改應用程式設定後調用。

現在啟動 APM Express,通過瀏覽器執行 http://localhost/testDB/test1.php,如果一切正常,應該看到 Connect to database successed 資訊。

如果出現如下的錯誤資訊,說明 MySQL 資料庫的 root 使用者密碼不正確。請修改上面代碼中的 password 資訊。

Warning: mysql_connect() [function.mysql-connect]: Access denied for user 'root'@'localhost'

建立記錄

接下來,我們用 phpMyAdmin 在 test 資料庫中執行下面的 SQL 陳述式。這會建立在 test 資料庫中建立一個名為 posts 的表。

CREATE TABLE `posts` (  `post_id` int(11) NOT NULL auto_increment,  `title` varchar(255) NOT NULL,  `body` text NOT NULL,  `created` int(11) default NULL,  `updated` int(11) default NULL,  PRIMARY KEY  (`post_id`)) DEFAULT CHARSET=gb2312;

現在我們修改 test1.php 的內容為以下內容:

<?phprequire('../FLEA/FLEA.php');// 準備資料庫連接資訊$dsn = array(    'driver'        => 'mysql',    'host'          => 'localhost',    'login'         => 'root',    'password'      => '',    'database'      => 'test',);// 指定資料庫連接設定,TableDataGateway 會自動取出 dbDSN 設定來串連資料庫set_app_inf('dbDSN', $dsn);// 初始化 FleaPHP 運行環境__FLEA_PREPARE();// 由於 FLEA_Db_TableDataGateway 並不是自動載入的,因此需要明確載入load_class('FLEA_Db_TableDataGateway');// 從 FLEA_Db_TableDataGateway 派生 Posts 類class Posts extends FLEA_Db_TableDataGateway{    // 指定資料表名稱    var $tableName = 'posts';    // 指定主鍵欄位名    var $primaryKey = 'post_id';}// 構造 Posts 執行個體$modelPosts =& new Posts();// 建立一條新記錄,並返回新記錄的主索引值$newPostId = $modelPosts->create(array(    'title' => 'First post',    'body'  => 'First post body',));echo $newPostId;?>

在瀏覽器重新運行 test1.php,會看到輸出結果 1。如果多重新整理幾次,可以看到這個數字不斷增長。現在轉到 phpMyAdmin,瀏覽 posts 表,會發現這個表已經插入了資料。

注意上圖中劃紅圈的 created 欄位。雖然我們上面的代碼在用 $modelPosts->create() 插入記錄時並沒有提供該欄位的值,但該欄位的值被自動填滿了。

當資料表中具有名為 created、created_at 或 created_on 的欄位,並且欄位類型為整數或日期,則在向這個資料表插入記錄時。FleaPHP 會自動用目前時間填充該欄位。同樣的,updated、updated_at 或 updated_on 欄位會在更新記錄時用目前時間填充。

關於 FLEA_Db_TableDataGateway

FLEA_Db_TableDataGateway 是一個提供自動化 CRUD 操作的類。開發人員必須從該類派生自己的類。每一個 FLEA_Db_TableDataGateway 衍生類別對應一個資料表。例如上面代碼中的 Posts 類就對應資料表 posts。FLEA_Db_TableDataGateway 衍生類別在 FleaPHP 應用程式中稱為表資料入口。

每一個表資料入口都需要定義一個必須的成員變數:

  • $tableName 指定該表資料入口對應的資料表

如果資料表有多個主鍵欄位,那麼還要用 $primaryKey 指定要使用的主鍵欄位。當沒有用 $primaryKey 指定時,FLEA_Db_TableDataGateway 會自動根據資料表定義來確定主鍵欄位名。

完成上面的定義後,一個表資料入口類就準備好了。只要執行個體化這個類,就能對該類對應的資料表進行各種操作了。


讀取和更新記錄

現在我們繼續修改前面的代碼,增加如下內容:

/** * .... 接續上面的程式碼片段 */echo "<hr />\n";// 讀取剛剛建立的新記錄$post = $modelPosts->find($newPostId);// 輸出記錄內容dump($post);// 修改記錄內容$post['title'] = 'New title';// 儲存修改後的記錄到資料庫$modelPosts->update($post);// 重新查詢被修改後的記錄$updatedPost = $modelPosts->find($newPostId);// 輸出修改後的記錄內容dump($updatedPost);

現在通過瀏覽器執行 test1.php,就可以看到兩個稍有不同的輸出。

第一段輸出是用 $modelPosts->find() 取出的記錄內容。而第二段資料是用 $modelPosts->update() 更新後再取出的記錄內容。

對比兩段輸出,可以看到第二段輸出的 title 欄位和 updated 欄位都被修改了。


刪除記錄

刪除記錄有兩種主要的方式,一是用表資料入口的 remove() 方法,以一條記錄做參數。另一種方法是用 removeByPkv() 方法,以記錄的主索引值做參數。

// 取出所有 title 欄位值為 'First post' 的記錄$posts = $modelPosts->findAll(array('title' => 'First post'));// 刪除這些記錄foreach ($posts as $post) {    $modelPosts->remove($post);    // 或者使用    // $modelPosts->removeByPkv($post[$modelPosts->primaryKey]);}

這個章節裡面,我們粗略的看了一下 FleaPHP 提供的表資料入口提供的基本操作。在後續章節裡面,我們會看到表資料入口的其他強大功能。



相關文章

Beyond APAC's No.1 Cloud

19.6% IaaS Market Share in Asia Pacific - Gartner IT Service report, 2018

Learn more >

Apsara Conference 2019

The Rise of Data Intelligence, September 25th - 27th, Hangzhou, China

Learn more >

Alibaba Cloud Free Trial

Learn and experience the power of Alibaba Cloud with a free trial worth $300-1200 USD

Learn more >

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。