以前我發了一篇博文PHP數據庫操做:從MySQL原生API到PDO,向你們展現PHP是如何使用MySQL原生API
、MySQLi面向過程
、MySQLi面向對象
、PDO
操做MySQL數據庫的。本文介紹如何使用ORM
操做數據庫。php
什麼是ORM呢?引用網友的話:html
ORM
對象關係映射,O(Object
) 對象,在項目中就是實體,更加精確的來講就是數據Model
,也能夠說持久化類。R(Relation
) 關係數據,M (Mapping
)映射,將對象映射到關係數據,將關係數據映射到對象的過程。更加直觀理解就是,ORM
就是以OOP
思想,產生增刪改查SQL語句。mysql
相比PDO,ORM更適合快速開發項目,而不用寫SQL語句。下面介紹幾個好用的ORM。git
下文均以版本1.0.2爲例。github
PHP 5.1+, 推薦PHP 5.4+ 且支持PDO.
至少安裝了MySQL, MSSQL, SQLite其中一種.sql
Medoo支持Composer安裝和直接下載。數據庫
使用Composer安裝:json
composer require catfan/Medoo composer update
直接下載:
https://github.com/catfan/Medoo/archive/master.zipapi
引入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' ]);
查詢(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)); //返回受影響的行數
$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; } });
能夠直接使用SQL。
//查詢 $data = $db->query("SELECT * FROM user")->fetchAll(); print_r($data); //刪除 $db->query("DELETE FROM user where name='t5' ");
Medoo是基於PDO的,因此能夠直接調用PDO實例。
獲取PDO實例:
$pdo = $db->pdo;
接下來,能夠使用PDO對象的全部方法了。
1.PDO::beginTransaction — 啓動一個事務 2.PDO::commit — 提交一個事務 3.PDO::__construct — 建立一個表示數據庫鏈接的 PDO 實例 4.PDO::errorCode — 獲取跟數據庫句柄上一次操做相關的 SQLSTATE 5.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() 打印最終的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是Laravel框架使用的ORM。Laravel 的 Eloquent ORM 提供了更優雅的ActiveRecord 實現來和數據庫的互動。 每一個數據庫表對應一個模型文件。
參考:
一、Guidebook - Medoo
http://medoo.in/api/new/
二、Eloquent ORM筆記 - 飛鴻影~ - 博客園
http://www.cnblogs.com/52fhy/p/5277657.html
(未完待續。。。)