之前我发了一篇博文PHP数据库操作:从MySQL原生API到PDO,向大家展示PHP是如何使用MySQL原生API、MySQLi面向过程、MySQLi面向对象、PDO操作MySQL数据库的。本文介绍如何使用ORM操作数据库。
什么是ORM呢?引用网友的话:
ORM 对象关系映射,O(Object) 对象,在项目中就是实体,更加精确的来说就是数据Model,也可以说持久化类。R(Relation) 关系数据,M (Mapping)映射,将对象映射到关系数据,将关系数据映射到对象的过程。更加直观理解就是,ORM 就是以OOP思想,产生增删改查SQL语句。
相比PDO,ORM更适合快速开发项目,而不用写SQL语句。下面介绍几个好用的ORM。
Medoo
下文均以版本1.0.2为例。
环境要求
PHP 5.1+, 推荐PHP 5.4+ 且支持PDO.
至少安装了MySQL, MSSQL, SQLite其中一种.
如何安装
Medoo支持Composer安装和直接下载。
使用Composer安装:
composer require catfan/Medoocomposer update
直接下载:
https://github.com/catfan/Medoo/archive/master.zip
开始使用
引入Medoo并配置数据库:
<?php//使用Composer安装的这样引入//require 'vendor/autoload.php';// 直接下载的这样引入require_once 'medoo.php'; // 初始化$db = new medoo([ 'database_type' => '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
聚合查询
$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());
Eloquent ORM
Eloquent ORM是Laravel框架使用的ORM。Laravel 的 Eloquent ORM 提供了更优雅的ActiveRecord 实现来和数据库的互动。 每个数据库表对应一个模型文件。
参考:
1、Guidebook - Medoo
http://medoo.in/api/new/
2、Eloquent ORM笔记 - 飞鸿影~ - 博客园
(未完待续。。。)

PHP是一種服務器端腳本語言,用於動態網頁開發和服務器端應用程序。 1.PHP是一種解釋型語言,無需編譯,適合快速開發。 2.PHP代碼嵌入HTML中,易於網頁開發。 3.PHP處理服務器端邏輯,生成HTML輸出,支持用戶交互和數據處理。 4.PHP可與數據庫交互,處理表單提交,執行服務器端任務。

PHP在過去幾十年中塑造了網絡,並將繼續在Web開發中扮演重要角色。 1)PHP起源於1994年,因其易用性和與MySQL的無縫集成成為開發者首選。 2)其核心功能包括生成動態內容和與數據庫的集成,使得網站能夠實時更新和個性化展示。 3)PHP的廣泛應用和生態系統推動了其長期影響,但也面臨版本更新和安全性挑戰。 4)近年來的性能改進,如PHP7的發布,使其能與現代語言競爭。 5)未來,PHP需應對容器化、微服務等新挑戰,但其靈活性和活躍社區使其具備適應能力。

PHP的核心優勢包括易於學習、強大的web開發支持、豐富的庫和框架、高性能和可擴展性、跨平台兼容性以及成本效益高。 1)易於學習和使用,適合初學者;2)與web服務器集成好,支持多種數據庫;3)擁有如Laravel等強大框架;4)通過優化可實現高性能;5)支持多種操作系統;6)開源,降低開發成本。

PHP沒有死。 1)PHP社區積極解決性能和安全問題,PHP7.x提升了性能。 2)PHP適合現代Web開發,廣泛用於大型網站。 3)PHP易學且服務器表現出色,但類型系統不如靜態語言嚴格。 4)PHP在內容管理和電商領域仍重要,生態系統不斷進化。 5)通過OPcache和APC等優化性能,使用OOP和設計模式提升代碼質量。

PHP和Python各有優劣,選擇取決於項目需求。 1)PHP適合Web開發,易學,社區資源豐富,但語法不夠現代,性能和安全性需注意。 2)Python適用於數據科學和機器學習,語法簡潔,易學,但執行速度和內存管理有瓶頸。

PHP用於構建動態網站,其核心功能包括:1.生成動態內容,通過與數據庫對接實時生成網頁;2.處理用戶交互和表單提交,驗證輸入並響應操作;3.管理會話和用戶認證,提供個性化體驗;4.優化性能和遵循最佳實踐,提升網站效率和安全性。

PHP在數據庫操作和服務器端邏輯處理中使用MySQLi和PDO擴展進行數據庫交互,並通過會話管理等功能處理服務器端邏輯。 1)使用MySQLi或PDO連接數據庫,執行SQL查詢。 2)通過會話管理等功能處理HTTP請求和用戶狀態。 3)使用事務確保數據庫操作的原子性。 4)防止SQL注入,使用異常處理和關閉連接來調試。 5)通過索引和緩存優化性能,編寫可讀性高的代碼並進行錯誤處理。

在PHP中使用預處理語句和PDO可以有效防範SQL注入攻擊。 1)使用PDO連接數據庫並設置錯誤模式。 2)通過prepare方法創建預處理語句,使用佔位符和execute方法傳遞數據。 3)處理查詢結果並確保代碼的安全性和性能。


熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

AI Hentai Generator
免費產生 AI 無盡。

熱門文章

熱工具

mPDF
mPDF是一個PHP庫,可以從UTF-8編碼的HTML產生PDF檔案。原作者Ian Back編寫mPDF以從他的網站上「即時」輸出PDF文件,並處理不同的語言。與原始腳本如HTML2FPDF相比,它的速度較慢,並且在使用Unicode字體時產生的檔案較大,但支援CSS樣式等,並進行了大量增強。支援幾乎所有語言,包括RTL(阿拉伯語和希伯來語)和CJK(中日韓)。支援嵌套的區塊級元素(如P、DIV),

Atom編輯器mac版下載
最受歡迎的的開源編輯器

EditPlus 中文破解版
體積小,語法高亮,不支援程式碼提示功能

PhpStorm Mac 版本
最新(2018.2.1 )專業的PHP整合開發工具

WebStorm Mac版
好用的JavaScript開發工具