<iframe align="top" marginwidth="0" marginheight="0" src="http://www.zealware.com/csdnblog01.html" frameborder="0" width="728" scrolling="no" height="90"></iframe>
这一章我们就来看看 FleaPHP 的数据库访问功能。体验一下 FleaPHP 出色的自动化 CRUD 能力。
连接数据库
在 htdocs 目录中创建子目录 testDB,并在子目录下创建文件 test1.php 文件,内容如下:
<?php </span>require('../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 的内容为以下内容:
<?php </span>require('../FLEA/FLEA.php');$dsn = array( 'driver' => 'mysql', 'host' => 'localhost', 'login' => 'root', 'password' => '', 'database' => 'test',);set_app_inf('dbDSN', $dsn);__FLEA_PREPARE();load_class('FLEA_Db_TableDataGateway');class Posts extends FLEA_Db_TableDataGateway{ var $tableName = 'posts'; var $primaryKey = 'post_id';}$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 "
/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() 方法,以记录的主键值做参数。
$posts = $modelPosts->findAll(array('title' => 'First post'));foreach ($posts as $post) { $modelPosts->remove($post); }
这个章节里面,我们粗略的看了一下 FleaPHP 提供的表数据入口提供的基本操作。在后续章节里面,我们会看到表数据入口的其他强大功能。
<!-- generated by Texy! -->
Trackback: http://tb.blog.csdn.net/TrackBack.aspx?PostId=1349953
相关推荐
大道PHP 第44章 应用FleaPHP开发论坛社区系统.doc
PHP开发框架 Fleaphp
Fleaphp框架使用规范收集.pdf
PHP一键安装环,简单,方便,实用。此环境包括[APACHE2+PHP5+MYSQL5] 安装完成后在D盘自动生成apmxe文件夹,双击文件夹中的run-fleaphp.exe自动运行PHP环境。
FleaPHP 开发指南,cf gf FleaPHP的初学者而言是一个很好的学习资料!
fleaphp框架,国产最好php开发框架
FleaPHP 框架学习教程.pdf
fleaphp1.7.1524,官方下载不了,这里提供一个下载地址给大家
包含php mysql FLEAPHP Smarty 正则 javascript html等多种设计语言与开发语言的手册,下载一个,受用一生
初学者必备的学习手册,特别是初学fleaphp的朋友,这本书非常好!当然你还要下点别的资料!
FleaPHP 开源应用程序开发框架中常用系统方法详解: FLEA::initWebControls() 函数原型: /** * 初始化 WebControls,返回 FLEA_WebControls 对象实例 * @return FLEA_WebControls */ function & ...
FleaPHP 框架学习教程,高清,适合php和框架的进阶学习
【项目资源】:包含前端、后端、移动开发、操作系统、人工智能、物联网、信息化管理、数据库、硬件开发、大数据、课程资源、音视频、网站开发等各种技术项目的源码。包括STM32、ESP8266、PHP、QT、Linux、iOS、C++、...
fleaphp ajaxLogin 实例