本文描述了PHP-Phalcon框架中数据库操作方法,主要讨论Phalcon框架的Model组件中的操作方法。更详细的Model介绍请参考:官方文档

1. 连接数据库

在Phalcon框架中,通过在DI中注入db参数来实现数据库的连接和配置,基本的配置方法如下:

use Phalcon\Db\Adapter\Pdo\Mysql as DbAdapter;

$di->set('db', function () {

return new DbAdapter(array(

"host" => "localhost",

"username" => "root",

"password" => "",

"dbname" => "test"

));

});

通过在$di中设置'db'的连接属性,包括host,username,password,dbname等属性来获取数据库参数,配置好db之后就可以利用Phalcon中的ORM框架了。

另一种通过配置文件的方法如下:

1.首先需要将数据信息写入配置文件,在Phalcon中支持ini, php, json等三种配置文件形式,以下为ini形式的配置文件。

[database]

adapter = Mysql

host = localhost

username = root

password =

dbname = test

2.利用配置文件将数据库信息写入DI

$di->set('db', function () use ($config) {

$config = $config->get('database')->toArray();

$dbClass = 'Phalcon\Db\Adapter\Pdo\\' . $config['adapter'];

unset($config['adapter']);

return new $dbClass($config);

});

2. 建立数据库表

在MySQL中建立数据库表,如下所示:

CREATE TABLE `customer` (

`id` int(11) NOT NULL AUTO_INCREMENT,

`username` varchar(255) DEFAULT NULL,

`password` varchar(32) DEFAULT NULL,

PRIMARY KEY (`id`)

) ENGINE=InnoDB DEFAULT CHARSET=utf8;

以上语句建立了一个customer表,包括主键id,以及username和password两个字段。

3. 创建模型

根据上述数据库表,创建Customer.php模型类,需要注意的是模型类必须继承Phalcon\MVC\Model类,并且采用与数据库表名一致的驼峰命名法。因此建立如下的Customer类:

class Customer extends \Phalcon\Mvc\Model

{

//采用默认的对应规则会自动映射数据库表的字段,可以不写

/**

*

* @var integer

*/

public $id;

/**

*

* @var string

*/

public $username;

/**

*

* @var string

*/

public $password;

/**

* Returns table name mapped in the model.

*

* @return string

*/

public function getSource()

{

return 'customer';

}

}

其实只要满足了对应的命名规则,模型类中的属性是不需要定义的,这里定义的目的是方便开发过程中查看,并且可以提高性能;此外,如果没有采用数据库表名对应的类名进行命名的话,就需要在初始化函数中通过setSource方法进行配置,配置代码:

public function initialize()

{

$this->setSource("tablename");

}

从这里可以看出,在现代的Web开发框架中,都遵循约定大于配置(CoC)的基本原则。只要遵循约定,就可以很方便的进行Web开发。

4. 数据库操作

在Phalcon中操作数据库提供了基本的ORM映射方式以及更加复杂的PHQL方式。ORM映射方式支持不写SQL语句直接操作数据库,基本上已经提供了绝大多数使用场景的支持;另一种更为高级的PHQL方式,支持编写Phalcon化的SQL语句来操作数据库。这里不编写SQL语句,直接使用ORM映射本身提供的一切功能。

4.1 添加数据

如果我想添加一条数据,最基本的方式演示如下:

新建一个控制器DatabaseController

在控制器中添加InsertAction

在InsertAction中写入下列代码:

public function insertAction()

{

$customer = new Customer();

$customer->username = 'liyi';

$customer->password = '123456';

$ret = $customer->save();

if($ret){

print_r('插入成功');

} else {

print_r('插入失败');

}

}

4.2 查询数据

1.find方法

Phalcon中提供了静态方法find,采用find方法可以返回表中符合条件的所有数据:

public function findAction()

{

$customers = Customer::find();

$result = [];

foreach ($customers as $customer) {

$result[] = [

'username' => $customer->username,

'password' => $customer->password,

];

}

$this->response->setContentType('application/json', 'UTF-8');

return $this->response->setJsonContent($result);

}

调用类的静态方法find()会返回包含有customer数据表内容的结果集,对于结果集的处理通常采用foreach进行遍历,如代码所示,对遍历的每一个对象调取属性值,然后赋值给关联数组。

2.findFirst方法

Phalcon中的findFirst方法与find方法的使用方式几乎无异,其区别在于findFirst方法的返回结果为单值,不需要通过foreach遍历获取每个值,在下面的代码中演示了查询数据库表中username字段值等于'liyi'的记录。

public function findfirstAction()

{

$customer = Customer::findFirst("username = 'liyi'");

$result = [

'username' => $customer->username,

'password' => $customer->password,

];

$this->response->setContentType('application/json', 'UTF-8');

return $this->response->setJsonContent($result);

}

3.findBy方法

在Phalcon框架中支持findBy的扩展查询,在上例中,可以把条件语句改为findFirstByUsername,同时省略查询条件,结果不变。

$customer = Customer::findFirstByUsername('kirineko');

4.参数化查询语句

如果需要查询的内容较多,或者是从防止SQL注入的安全角度来考虑,应当使用参数化的查询语句。比如如果需要从数据库中查找username=(@用户输入的值)并且password=(@用户输入的值)的用户,那么就应当使用参数化查询。

下面模拟用户登录的过程,用户输入用户名和密码,然后系统在数据库中进行查找,如果找到则返回欢迎页,如果没有找到,就提示错误信息。

public function loginAction()

{

$username = $this->request->getPost('username');

$password = $this->request->getPost('password');

$conditons = 'username = :username: and password = :password:';

$parameters = [

'username' => $username,

'password' => $password,

];

$ret = Customer::findFirst(

[

$conditons,

'bind' => $parameters,

]);

if($ret){

print_r('login success');

} else {

print_r('login failed');

}

}

4.3 更新数据

更新数据的方法通常是先查询数据,如果能查到数据就对数据进行赋值,然后save即可。现在要更新用户名为kirineko的密码为用户指定的密码,代码如下:

public function updateAction()

{

$password = $this->request->getPost('password');

$newpassword = $this->request->getPost('newpassword');

$conditons = 'username = :username: and password = :password:';

$parameters = [

'username' => 'kirineko',

'password' => $password,

];

$customer = Customer::findFirst([

$conditons,

'bind' => $parameters,

]);

if($customer){

$customer->password = $newpassword;

$customer->save();

print_r('更新成功');

} else {

print_r('用户名不存在或密码错误');

}

}

4.4 删除数据

Phalcon的提供了delete命令用于删除,现要删除用户名为liyi的数据,代码如下:

public function deleteAction()

{

$customer = Customer::findFirstByUsername('liyi');

if($customer){

$res = $customer->delete();

if($res) {

print_r('删除成功');

} else {

print_r('删除失败');

}

} else {

print_r('用户不存在');

}

}

phalcon mysql_PHP-Phalcon框架中的数据库操作相关推荐

  1. ci如何使用中$.ajax 中的 url 如何使用php的代码,CI框架中使用ajax操作数据库有关问题...

    CI框架中使用ajax操作数据库问题 本帖最后由 A9925 于 2014-11-24 16:11:05 编辑 前台: //调用方法用ajax操作add_dbdata.php var xmlHttp ...

  2. phpwind database.php,phpwind中的数据库操作类

    phpwind中的数据库操作类 更新时间:2007年01月02日 00:00:00   作者: /*来源:phpwind.net*/ Class DB { var $query_num = 0; fu ...

  3. android中的数据库操作(SQLite)

    android中的数据库操作 android中的应用开发很难避免不去使用数据库,这次就和大家聊聊android中的数据库操作. 一.android内的数据库的基础知识介绍 1.用了什么数据库   an ...

  4. php封装的数据库操作文件夹,PHP中对数据库操作的封装_php

    现在我们把其封装在dbfz.inc中,其设计如下: $#@60;? class dbInterface{ var $dbID=1; //用于确定当前操作的数据库,当dbID为1代表mysql,当为 2 ...

  5. php定义数据表类,phpwind中的数据库操作类

    phpwind中的数据库操作类 2021-01-22 20:12:15141 /*来源:phpwind.net*/ ClassDB{ var$query_num=0; functionDB($dbho ...

  6. wp-db.php,WordPress中的数据库操作类wp-db.php

    版权:转载 来源:互联网 WordPress中的数据库操作类wp-db.php的原型是ezSQL.官方网站: http://php.justinvincent.com ezSQL支持对如下数据库的操作 ...

  7. android中的数据库操作

    android中的数据库操作 android中的应用开发很难避免不去使用数据库,这次就和大家聊聊android中的数据库操作. 一.android内的数据库的基础知识介绍 1.用了什么数据库 andr ...

  8. 一文详解python中的数据库操作

    python中的数据库操作 一.数据库编程接口 1. 连接对象 二.使用内置的SQLite 1.创建数据库文件 2.操作SQLite 三.MySql数据库的使用 3.1 安装MySql 3.2 设置环 ...

  9. 十八、Express框架连接MySQL数据库操作

    在上一篇中已经在Node.js中引入使用了mysql模块进行数据库的基本操作,在本篇当中在Express框架中来连接数据库以及操作数据库: Express 项目环境 这里是通过全局安装Express框 ...

  10. PHP中对数据库操作的封装

    在动态网面设计中很多都要涉及到对数据库的操作,但是有时跟据需要而改用其它后台数据库,就需要大量修改程序.这是一件枯燥.费时而且容易出错的功作.其实我们可以用PHP中的类来实现对数据库操作的封装,从而使 ...

最新文章

  1. Spring mvc Data Redis—Pub/Sub(附Web项目源码)
  2. OpenCV重新映射Remapping
  3. python3.6里有xhr吗_python – XHR请求URL在尝试解析其内容时不存在
  4. android必看java_Android开发工程师必看笔试题:Java基础选择题(一)
  5. TrackBack 技术规范
  6. 推荐一款 ES 集群可视化工具:Cerebro,简单、实用!
  7. linux grep正则表达式,linux-正则表达式与grep命令
  8. 元组怎么变成列表_Python入门教程笔记(四)元组(tuple)及字典(dict)
  9. Keil5手动添加Device
  10. 关于Keil4 C51版本可以编译但是无法完成编译的问题解决
  11. 解决Oracle安装过程中出现的缺少KEY_XE.reg文件的问题
  12. excel取消隐藏_猴哥讲述:对excel工作表进行隐藏和取消隐藏的操作行为
  13. 机器人学笔记之——操作臂运动学:驱动器空间、关节空间和笛卡尔空间
  14. 微信公共平台配置域名提示,协议头非法
  15. KEIL4 的操作技巧
  16. 北京语言大学计算机英语统考,大学英语b级复习资料_统考英语b题库|北语网院大学英语b辅导...
  17. 单摆模型,控制器及其MATLAB图形仿真
  18. 2021-2022 ACM-ICPC Latin American Regional Programming Contest
  19. mysql aarch64_aarch64华为鲲鹏服务器安装Mysql5.7
  20. STM32定时器配置(TIM1、TIM2、TIM3、TIM4、TIM5、TIM8)高级定时器+普通定时器,定时计数模式下总结

热门文章

  1. 大型网站架构技术演进(史上最全)
  2. 五、嵌入式学习笔记--GPIO接口
  3. 苹果app-H5封装源码-一键封装app搭建
  4. 台积电发年终奖,总额712亿新台币
  5. 【秋招内推】近期互联网公司秋招内推合集
  6. python半圆,(小小黑科技)vue+echarts实现半圆图表
  7. stm32f4定时器时钟频率/选择
  8. Appium 自动化测试(5)-- Appium详细介绍:Appium 手机自动化测试_TesterHome公开版pdf
  9. RTB广告大数据时代 人才奇缺培养迫在眉睫
  10. 【附源码】计算机毕业设计java中小学在线考试系统设计与实现