PHP使用ORM進行資料庫操作

來源:互聯網
上載者:User
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());

相關閱讀

對PHP PDO的一些認識小結

php中PDO方式實現資料庫的增刪改查

php使用pdo串連mssql server資料庫執行個體

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.