在Phalcon框架中,經過在DI中注入db參數來實現數據庫的鏈接和配置,基本的配置方法以下:php
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框架了。html
另外一種經過配置文件的方法以下:sql
1.首先須要將數據信息寫入配置文件,在Phalcon中支持ini, php, json等三種配置文件形式,如下爲ini形式的配置文件。數據庫
[database] adapter = Mysql host = localhost username = root password = dbname = test
2.利用配置文件將數據庫信息寫入DIjson
$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); });
在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兩個字段。安全
根據上述數據庫表,建立Customer.php模型類,須要注意的是模型類必須繼承Phalcon\MVC\Model類,而且採用與數據庫表名一致的駝峯命名法。所以創建以下的Customer類:app
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開發。函數
在Phalcon中操做數據庫提供了基本的ORM映射方式以及更加複雜的PHQL方式。ORM映射方式支持不寫SQL語句直接操做數據庫,基本上已經提供了絕大多數使用場景的支持;另外一種更爲高級的PHQL方式,支持編寫Phalcon化的SQL語句來操做數據庫。這裏不編寫SQL語句,直接使用ORM映射自己提供的一切功能。
若是我想添加一條數據,最基本的方式演示以下:
public function insertAction() { $customer = new Customer(); $customer->username = 'liyi'; $customer->password = '123456'; $ret = $customer->save(); if($ret){ print_r('插入成功'); } else { print_r('插入失敗'); } }
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); }
調用
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'); } }
更新數據的方法一般是先查詢數據,若是能查到數據就對數據進行賦值,而後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('用戶名不存在或密碼錯誤'); } }
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('用戶不存在'); } }