0

0

PHP使用ORM进行数据库操作

*文

*文

发布时间:2017-12-21 15:56:34

|

3117人浏览过

|

来源于php中文网

原创

orm 对象关系映射,o(object) 对象,在项目中就是实体,更加精确的来说就是数据model,也可以说持久化类。r(relation) 关系数据,m (mapping)映射,将对象映射到关系数据,将关系数据映射到对象的过程。更加直观理解就是,orm 就是以oop思想,产生增删改查sql语句。

相比PDO,ORM更适合快速开发项目,而不用写SQL语句。下面介绍几个好用的ORM。

Medoo

下文均以版本1.0.2为例。

环境要求

立即学习PHP免费学习笔记(深入)”;

PHP 5.1+, 推荐PHP 5.4+ 且支持PDO.
至少安装了MySQL, MSSQL, SQLite其中一种.

如何安装

Medoo支持Composer安装和直接下载。

使用Composer安装:

composer require catfan/Medoo
composer update

直接下载:
https://github.com/catfan/Medoo/archive/master.zip

开始使用

引入Medoo并配置数据库:

 'mysql',    
                  'database_name' => 'test',    
                  'server' => 'localhost',    
                  'username' => 'root',    
                  'password' => '123456',    
                  'charset' => 'utf8',    
                //可选:端口
                'port' => 3306, 
                //可选:表前缀
                'prefix' => '', 
                // PDO驱动选项 http://www.php.net/manual/en/pdo.setattribute.php
                'option' => [ PDO::ATTR_CASE => PDO::CASE_NATURAL ]
      ]);

如果是SQLite:

$database = new medoo([    'database_type' => 'sqlite',    'database_file' => 'my/database/path/database.db']);

CURD

查询(Read):

select($table, $columns, $where) //获取所有记录
    - table [string] 表名
    - columns [string/array] 字段
    - where (可选) [array] 查询条件get($table, $columns, $where) //仅获取一条数据select($table, $join, $columns, $where)
    - table [string] 表名
    - join [array] 关联查询,如果没有可以忽略
    - columns [string/array] 字段
    - where (可选) [array] 查询条件

示例:

$user = $db->select('user', '*'); 
//返回所有数据
$user = $db->get('user', '*'); 
//返回一条数据
$user = $db->select('user','*', array('name ' => 'joy'));
$user = $db->select('user','name', array('age[>] ' => 20)); 
$user = $db->select('user',['name','age'], array('age[<=] ' => 20));

新增(Create):

insert($table, $data)

示例:

$db->insert('user', array('name'=> 't3', 'age'=>22)); //返回自增id

注意:如果数据里面包含子数组将会被serialize()序列化, 你可以使用json_encode()作为JSON存储.

更新(Update):

update($table, $data, $where)

示例:

$db->update('user', array('name'=> 't5'), array('id'=> 23)); //返回受影响的行数

删除(Delete):

delete($table, $where)

示例:

$db->update('user',  array('id'=> 23)); //返回受影响的行数

where

Notion AI
Notion AI

Notion是一款集成了笔记、知识库、数据表格、看板、日历等多种能力于一体的应用程序,它既可供个人使用,也可以与他人进行跨平台协作。

下载

聚合查询

$db->has('user',  array('id'=> 23)); //记录是否存在
$db->count('user',  array('id[>]'=> 23));//统计
$db->max('user', 'age', array('gender'=> 1));//最大值
$db->min('user', 'age', array('gender'=> 2)); //最小值
$db->avg('user',  'age', array('gender'=> 2)); //平均值
$db->sum('user',  'age', array('gender'=> 2)); //求和

以上方法均支持第二个参数是$join,即关联查询。

事务机制

$db->action(function($db) {    
      try{
        $db->insert("account", [ "name" => "foo", "email" => "bar@abc.com" ]);
        $db->delete("account", [ "user_id" => 2312 ]);
    }catch(Exception $e){        
          // 返回false就会回滚事务
        return false;
    }
});

使用query

可以直接使用SQL。

//查询
$data = $db->query("SELECT * FROM user")->fetchAll();
print_r($data);
//删除
$db->query("DELETE FROM user where name='t5' ");

直接使用PDO

Medoo是基于PDO的,所以可以直接调用PDO实例。

获取PDO实例:

$pdo = $db->pdo;

接下来,可以使用PDO对象的所有方法了。

1.PDO::beginTransaction — 启动一个事务
2.PDO::commit — 提交一个事务
3.PDO::__construct — 创建一个表示数据库连接的 PDO 实例
4.PDO::errorCode — 获取跟数据库句柄上一次操作相关的 SQLSTATE5.PDO::errorInfo — 获取错误信息
6.PDO::exec — 执行一条 SQL 语句,并返回受影响的行数
7.PDO::getAttribute — 取回一个数据库连接的属性
*8.PDO::getAvailableDrivers — 返回一个可用驱动的数组(了解即可)
*9.PDO::inTransaction — 检查是否在一个事务内(了解即可)
10.PDO::lastInsertId — 返回最后插入行的ID或序列值
11.PDO::prepare — 创建SQL的预处理,返回PDOStatement对象
12.PDO::query — 用于执行查询SQL语句,返回PDOStatement对象
13.PDO::quote — 为sql字串添加单引号
14.PDO::rollBack — 回滚一个事务
15.PDO::setAttribute — 设置属性

示例:

$stmt = $pdo->query('select * from user limit 2'); //返回一个PDOStatement对象
//$row = $stmt->fetch(); //从结果集中获取下一行,用于while循环
$rows = $stmt->fetchAll(); //获取所有
print_r($rows);

pdo事务:

$pdo->beginTransaction();//开启事务处理
    try{//PDO预处理以及执行语句...
        $pdo->commit();//提交事务
    }catch(PDOException $e){
    $pdo->rollBack();//事务回滚
    //相关错误处理
    throw $e;
}

使用DEBUG

debug() 打印最终的SQL语句

在select、get、insert、update等方法前面加上debug()方法可以打印SQL语句,程序不会继续运行:

$user = $db->debug()->select('user', '*'); 
//SELECT "name","age" FROM "user" WHERE "age" <= 20

error() 返回最后一次操作的出错信息

$db->select('user3', '*'); 
var_dump($db->error());

log() 返回所有的SQL查询语句,不影响查询正常执行

$db->select('user', '*'); 
var_dump($db->log());

last_query() 和log()类似,但仅返回最后一条SQL查询语句,不影响查询正常执行

$db->select('user', '*'); 
var_dump($db->last_query());

相关阅读

对PHP PDO的一些认识小结

php中PDO方式实现数据库的增删改查

php使用pdo连接mssql server数据库实例

相关文章

PHP速学教程(入门到精通)
PHP速学教程(入门到精通)

PHP怎么学习?PHP怎么入门?PHP在哪学?PHP怎么学才快?不用担心,这里为大家提供了PHP速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载

相关标签:

php

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

通义千问
通义千问

阿里巴巴推出的全能AI助手

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
java入门学习合集
java入门学习合集

本专题整合了java入门学习指南、初学者项目实战、入门到精通等等内容,阅读专题下面的文章了解更多详细学习方法。

1

2026.01.29

java配置环境变量教程合集
java配置环境变量教程合集

本专题整合了java配置环境变量设置、步骤、安装jdk、避免冲突等等相关内容,阅读专题下面的文章了解更多详细操作。

2

2026.01.29

java成品学习网站推荐大全
java成品学习网站推荐大全

本专题整合了java成品网站、在线成品网站源码、源码入口等等相关内容,阅读专题下面的文章了解更多详细推荐内容。

0

2026.01.29

Java字符串处理使用教程合集
Java字符串处理使用教程合集

本专题整合了Java字符串截取、处理、使用、实战等等教程内容,阅读专题下面的文章了解详细操作教程。

0

2026.01.29

Java空对象相关教程合集
Java空对象相关教程合集

本专题整合了Java空对象相关教程,阅读专题下面的文章了解更多详细内容。

3

2026.01.29

clawdbot ai使用教程 保姆级clawdbot部署安装手册
clawdbot ai使用教程 保姆级clawdbot部署安装手册

Clawdbot是一个“有灵魂”的AI助手,可以帮用户清空收件箱、发送电子邮件、管理日历、办理航班值机等等,并且可以接入用户常用的任何聊天APP,所有的操作均可通过WhatsApp、Telegram等平台完成,用户只需通过对话,就能操控设备自动执行各类任务。

24

2026.01.29

clawdbot龙虾机器人官网入口 clawdbot ai官方网站地址
clawdbot龙虾机器人官网入口 clawdbot ai官方网站地址

clawdbot龙虾机器人官网入口:https://clawd.bot/,clawdbot ai是一个“有灵魂”的AI助手,可以帮用户清空收件箱、发送电子邮件、管理日历、办理航班值机等等,并且可以接入用户常用的任何聊天APP,所有的操作均可通过WhatsApp、Telegram等平台完成,用户只需通过对话,就能操控设备自动执行各类任务。

16

2026.01.29

Golang 网络安全与加密实战
Golang 网络安全与加密实战

本专题系统讲解 Golang 在网络安全与加密技术中的应用,包括对称加密与非对称加密(AES、RSA)、哈希与数字签名、JWT身份认证、SSL/TLS 安全通信、常见网络攻击防范(如SQL注入、XSS、CSRF)及其防护措施。通过实战案例,帮助学习者掌握 如何使用 Go 语言保障网络通信的安全性,保护用户数据与隐私。

8

2026.01.29

俄罗斯Yandex引擎入口
俄罗斯Yandex引擎入口

2026年俄罗斯Yandex搜索引擎最新入口汇总,涵盖免登录、多语言支持、无广告视频播放及本地化服务等核心功能。阅读专题下面的文章了解更多详细内容。

577

2026.01.28

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
PHP课程
PHP课程

共137课时 | 10.1万人学习

JavaScript ES5基础线上课程教学
JavaScript ES5基础线上课程教学

共6课时 | 11.2万人学习

PHP新手语法线上课程教学
PHP新手语法线上课程教学

共13课时 | 0.9万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号