FleaPHP 开发指南 - 6. 访问数据库

article/2025/9/12 4:19:23

这一章我们就来看看 FleaPHP 的数据库访问功能。体验一下 FleaPHP 出色的自动化 CRUD 能力。



连接数据库

在 htdocs 目录中创建子目录 testDB,并在子目录下创建文件 test1.php 文件,内容如下:

<?php
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
require('../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 提供的表数据入口提供的基本操作。在后续章节里面,我们会看到表数据入口的其他强大功能。


http://chatgpt.dhexx.cn/article/JZ5faTJw.shtml

相关文章

FleaPHP 的 Ajax 支持和 WebControls

原文地址&#xff1a; http://www.fleaphp.org/bbs/viewthread.php?tid40 FleaPHP 现在具有了基本的 Ajax 支持&#xff0c;示例代码如下&#xff1a; 首先在控制器显示模版的动作方法中有如下代码&#xff1a; /* * * 显示登录界面 */ function actionIndex() {…

实际采用 FleaPHP 的网站

下面都是采用 FleaPHP 框架开发的网站列表&#xff0c;如果发现无效连接请在留言。 如果你有采用 FleaPHP 开发的网站&#xff0c;并且愿意公开网址&#xff0c;可以发邮件到 dualface (at) gmail.com 需要提供的信息包括网站名称和连接地址&#xff0c;以及简单的介绍文字。…

获取和安装 FleaPHP

目前 FleaPHP 还处于开发中&#xff0c;您应该经常访问该页面&#xff0c;下载最新版本的 FleaPHP&#xff0c;或者通过 Subversion 仓库直接更新本地的 FleaPHP 代码。 FleaPHP 完全版和 FleaPHP runtime 核心合计下载次数已经超过 2000 次。 下载 FleaPHP 如果无法使用 Sub…

关于 FleaPHP

FleaPHP 并不是心血来潮的结果&#xff0c;而是作者在 Web 开发中不断探索的成果。虽然 FleaPHP 缺乏 Zend Framework 那样巨大的号召力&#xff0c;也没有 CakePHP 和 Symfony 那样庞大的社区。但 FleaPHP 仍然是一个值得你花时间去了解、去学习的框架。 FleaPHP 的设计目标 F…

http头部content-type与数据格式

http 头部中的 content-type 和我们传递的数据是息息相关的&#xff0c;不同的取值&#xff0c;服务器解析处理方式不同&#xff0c; 介绍一下几种常见的方式 text/plain&#xff1a;ajax默认方式&#xff0c;将文件设置为纯文本的形式&#xff0c;浏览器在获取到这种文件时…

http 协议中的content-type

content-type可以位于请求头、响应头&#xff0c;分别代表&#xff1a; Request头&#xff1a;请求的与实体对应的MIME信息&#xff08;post请求时的请求体&#xff09;Response头&#xff1a;返回内容的MIME类型 由于http1.0版规定&#xff0c;头信息必须是 ASCII 码类型&am…

contentType的类型及其在上传下载的例子

content-type之上传下载 下载 Content-Type 实体头部用于指示资源的MIME类型&#xff0c;在响应中&#xff0c;Content-Type标头告诉客户端实际返回的内容的类型。 Content-Disposition 是 MIME 协议的扩展&#xff0c;通常用在下载文件时&#xff0c;是下载文件的一个标识字…

Http中Content-Type等属性详解

前言 一直以来对HTTP请求中各种属性一知半解,偶然在博客中找到一篇,特意摘录过来方便自己以后查看. 正文 敬请关注博客&#xff0c;后期不断更新优质博文&#xff0c;谢谢 这里讲解Content-Type的可用值&#xff0c;以及在spring MVC中如何使用它们来映射请求信息。 1. Con…

HTTP首部——Content-Type的作用

前言 对于我们习以为常的东西&#xff0c;却没有仔细思考它的作用。 HTTP的首部都各有个的价值&#xff0c;最近看到这个Content-Type&#xff0c;忽然让我想起来以前自己的一个小小的失误&#xff0c;而产生了一个bug。但是当时却搞得我焦头烂额&#xff0c;我在网络上查找了一…

http(S)系列之(一):概念

参考文章&#xff1a; HTTP & HTTPS网络协议重点总结&#xff08;基于SSL/TLS的握手、TCP/IP协议基础、加密学&#xff09; 一篇比较全的HTTP协议详解 记&#xff1a;千万别误会&#xff0c;本章是完全ctrlc然后ctrlv&#xff0c;知识理解才是最重要&#xff0c;不必要在…

http 协议之 Content-Type

Content-Type 字段是 http 服务端返回给客户端时&#xff0c;head 里面带上的&#xff0c;这个字段表明服务端返回给客户端的 body 是什么类型的&#xff0c;然后客户端就可以根据这个类型进行文件处理。如浏览器客户端&#xff0c;针对 text/html 类型时&#xff0c;是直接显示…

Http中的Content-Type详解

Content-Type Content-Type&#xff08;MediaType&#xff09;&#xff0c;即是Internet Media Type&#xff0c;互联网媒体类型&#xff0c;也叫做MIME类型。在互联网中有成百上千中不同的数据类型&#xff0c;HTTP在传输数据对象时会为他们打上称为MIME的数据格式标签&#x…

HTTP(S)协议详解

1 什么是协议 协议&#xff0c;网络协议的简称&#xff0c;网络协议是通信计算机双方必须共同遵从的一组约定。如怎么样建立连接、怎么样互相识别等。只有遵守这个约定&#xff0c;计算机之间才能相互通信交流。 粗俗理解协议就是 比如你的电脑和我的电脑要通信&#xff0c;&a…

详解Http的Content-Type

目录 1.概述 2.常用类型 2.1.application/x-www-form-urllencoded 2.2.application/json 3.Spring MVC支持的编码 3.1.实验 3.2.适配器 3.3.自定义适配器 1.概述 HTTP&#xff08;HyperText Transfer Protocol&#xff09;&#xff0c;超文本传输协议。超文本&#xf…

Http协议之Content-Type理解

Content-Type&#xff0c;翻译过来就是”内容类型“&#xff0c;在互联网中就是”互联网媒体类型“。 在互联网中&#xff0c;两台计算机经常会传输数据&#xff0c;客户端会给服务器发数据&#xff0c;服务器也会给客户端发数据。数据的类型也是有很多种的&#xff0c;我们把所…

tomcat修改jdk配置两种方法

由于一个电脑多个项目,可能会使用多个版本的jdk,所以在跑tomcat的时候,可以自定义配置的各项目所使用的jdk 配置步骤(window设置): 1. 在catalina.bat找到如下代码: echo Using JAVA_HOME: “%JAVA_HOME%” 替换成 echo Using JAVA_HOME: “E:\Company\Tool\jdk1.7.0_13” 如…

linux下jdk配置

一、jdk下载 jdk下载地址&#xff1a;https://www.oracle.com/java/technologies/downloads/ 二、配置环境变量 1、解压 tar -xvf jdk-11.0.13_linux-x64_bin.tar.gz 2、配置环境变量 修改/etc/profile文件 vim /etc/profile 文件末尾添加 #jdk JAVA_HOME/usr/local/a…

Mac多JDK配置

Mac多JDK配置 开发环境有时候需要配置多个JDK&#xff0c;Windows下配置比较方便&#xff0c;Mac环境下稍微有点曲折 下载对于的JDK 这里我以JDK8、JDK11为例&#xff0c;可以从oracle官网下载&#xff0c;也可以从国内源下载,比如华为源 直接安装后 执行如下命令可以快速…

eclipse及jdk配置

JDK(Java Development Kit)是Sun Microsystems针对Java开发员的产品。自从Java推出以来&#xff0c;JDK已经成为使用最广泛的Java SDK。JDK 是整个Java的核心&#xff0c;包括了Java运行环境&#xff0c;Java工具和Java基础的类库。JDK是学好Java的第一步。而专门运行在x86平台…

JDK配置Path的详细教程(包教包会)

在教程之前,先提示一下,新版本的JDK(比如17)是不需要我们配置的,因为我们在下载的时候已经自动给我们配置了,但是老版本(比如JDK8)是需要我们自己去配置的 OK,进入正题,我们先来说一下为什么要给jdk配置path环境? 首先,我们需要清楚的是jdk是java的开发工具,运行一个java程序…