原生操作

$sql = "select * from b2b2c_shop where mobile=18812101090";

$a= $this->getReadConnection()->fetchAll($sql);

$sql = 'update ' . $this->getSource() . ' set field_status = 1 where shop_id = ' . $_SESSION['shop_id'] .' and field_id = '.$v;

$this->getReadConnection()->execute($sql);

#原生

// 使用原始SQL语句插入数据

$sql = 'INSERT INTO `robots`(`name`, `year`) VALUES ('Astro Boy', 1952)';

$success = $connection->execute($sql);

// 占位符

$sql = 'INSERT INTO `robots`(`name`, `year`) VALUES (?, ?)';

$success = $connection->execute(

$sql,

[

'Astro Boy',

1952,

]

);

// 动态生成必要的SQL

$success = $connection->insert(

'robots',

[

'Astro Boy',

1952,

],

[

'name',

'year',

],

);

// 动态生成必要的SQL(另一种语法)

$success = $connection->insertAsDict(

'robots',

[

'name' => 'Astro Boy',

'year' => 1952,

]

);

// 使用原始SQL语句更新数据

$sql = 'UPDATE `robots` SET `name` = 'Astro boy' WHERE `id` = 101';

$success = $connection->execute($sql);

// 占位符

$sql = 'UPDATE `robots` SET `name` = ? WHERE `id` = ?';

$success = $connection->execute(

$sql,

[

'Astro Boy',

101,

]

);

// 动态生成必要的SQL

$success = $connection->update(

'robots',

[

'name',

],

[

'New Astro Boy',

],

'id = 101' // 警告!在这种情况下,值不会被转义

);

// 动态生成必要的SQL(另一种语法)

$success = $connection->updateAsDict(

'robots',

[

'name' => 'New Astro Boy',

],

'id = 101' // 警告!在这种情况下,值不会被转义

);

// 转义条件

$success = $connection->update(

'robots',

[

'name',

],

[

'New Astro Boy',

],

[

'conditions' => 'id = ?',

'bind' => [101],

'bindTypes' => [PDO::PARAM_INT], // 可选参数

]

);

$success = $connection->updateAsDict(

'robots',

[

'name' => 'New Astro Boy',

],

[

'conditions' => 'id = ?',

'bind' => [101],

'bindTypes' => [PDO::PARAM_INT], // Optional parameter

]

);

// 使用原始SQL语句删除数据

$sql = 'DELETE `robots` WHERE `id` = 101';

$success = $connection->execute($sql);

// 占位符

$sql = 'DELETE `robots` WHERE `id` = ?';

$success = $connection->execute($sql, [101]);

// 动态生成必要的SQL

$success = $connection->delete(

'robots',

'id = ?',

[

101,

]

);

查找行

$sql = 'SELECT id, name FROM robots ORDER BY name';

// 将SQL语句发送到数据库系统

$result = $connection->query($sql);

// 打印每个 robot name

while ($robot = $result->fetch()) {

echo $robot['name'];

}

// 获取数组中的所有行

$robots = $connection->fetchAll($sql);

foreach ($robots as $robot) {

echo $robot['name'];

}

// 只获得第一行

$robot = $connection->fetchOne($sql);

设置返回类型

常量

描述

Phalcon\Db::FETCH_NUM

返回带有数字索引的数组

Phalcon\Db::FETCH_ASSOC

返回带关联索引的数组

Phalcon\Db::FETCH_BOTH

返回包含关联索引和数字索引的数组

Phalcon\Db::FETCH_OBJ

返回一个对象而不是一个数组

$sql = "select id,name from robots order ny name";

$result = $connection->query($sql);

$result->setFetchMode(Phalcon\Db::FETCH_NUM);

while($robot = $result->fetch()){

echo $robot[0]

}

绑定参数

// 使用数字占位符绑定

$sql = 'SELECT * FROM robots WHERE name = ? ORDER BY name';

$result = $connection->query(

$sql,

[

'Wall-E',

]

);

// 与命名占位符绑定

$sql = 'INSERT INTO `robots`(name`, year) VALUES (:name, :year)';

$success = $connection->query(

$sql,

[

'name' => 'Astro Boy',

'year' => 1952,

]

);

#类型限制

use Phalcon\Db\Column;

// ...

$phql = "SELECT * FROM Store\Robots LIMIT :number:";

$robots = $this->modelsManager->executeQuery(

$phql,

['number' => 10],

Column::BIND_PARAM_INT

);

类型占位符

$phql = "SELECT * FROM Store\Robots WHERE id > :id:";

$robots = $this->modelsManager->executeQuery($phql, ['id' => 100]);

接受请求数据

#控制器中接收数据

#在浏览器中访问 http://localhost/index/test1?a=1&b=2

$this->request->get() 方法能同时获取 GET 和 POST 请求的数据;

$this->request->getQuery() 只能获取 GET 方式的请求数据;

$this->request->getPost() 只能获取 POST 方式的请求数据。

#在Phalcon的路由匹配规则中,我们可以通过 $dispatcher来接收数据:

#但是需要注意的是这个需要在路由配置中进行设置

public function test3Action(){

$a = $this->dispatcher->getParam('a');

$b = $this->dispatcher->getParam('b');

var_dump($a);

var_dump($b);

}

#路由规则如下( app/config/routes.php):

'/index/test3/(\d+)/(\d+)' => array(

'module' => 'frontend',

'controller'=>'index',

'action'=>'test3',

'a' => 1,

'b' => 2,

),

响应数据格式

#返回json格式数据

public function test6Action(){

return $this->response->setJsonContent(array(

'code' => 1,

'message' => 'success',

));

}

页面跳转

#redirect(),仔细观察会发现浏览器中的URL地址已经发生了变化。

public function test4Action(){

return $this->response->redirect('https://www.marser.cn');

}

#forward(),此种方式的页面跳转不会改变URL地址,只是将请求转发到另一个控制器的action。

public function test5Action(){

return $this->dispatcher->forward(array(

'controller' => 'test',

'action' => 'index',

));

}

调用DI中注册的服务

#DI中注册的所有服务,在控制器中都可以直接调用:

public function test7Action(){

var_dump($this->session);

var_dump($this->cookies);

var_dump($this->request);

var_dump($this->response);

var_dump($this->db);

var_dump($this->logger);

//...

}

#我们可以在这里发散一下,在DI中注册我们的全局配置对象:

$di -> setShared('config', function() use($config){

return $config;

});

#在控制器中直接调用( $this->config)即可。

跟踪sql

$di->setShared('db', function () use ($config, $di) {

$connection = new Phalcon\Db\Adapter\Pdo\Mysql($config->toArray()["db"]);

$profiler = $di['profiler'];

if( $profiler ){

$eventsManager = new EventsManager();

$eventsManager->attach('db', function($event, $connection) use ($profiler) {

if ($event->getType() == 'beforeQuery') {

//Start a profile with the active connection

$profiler->startProfile($connection->getSQLStatement());

}

if ($event->getType() == 'afterQuery') {

//Stop the active profile

$profiler->stopProfile();

}

});

$connection->setEventsManager($eventsManager);

}

return $connection;

});

$di->setShared("profiler", function () use ($config) {

if (!$config->global->debug){

return false;

}

$profiler = new \Phalcon\Db\Profiler();

return $profiler;

});

function getLastSQLStatement()

{

$profile_init = $di['profiler'];

if(!$profile_init){

return "please set your debug mode true";

}

$profile = $profile_init->getLastProfile();

$db = $di['db'];

return $arr = [

'SQL Statement' => $profile->getSQLStatement(),

'Params' => $db->getSQLVariables(),

'Start Time' => $profile->getInitialTime(),

'Final Time' => $profile->getInitialTime(),

'Total Elapsed Time:' => $profile->getTotalElapsedSeconds(),

];

}

打印当前sql

$profiler = new \Phalcon\Db\Profiler();

// Set the connection profiler

$connection->setProfiler($profiler);

$sql = "SELECT buyer_name, quantity, product_name

FROM buyers LEFT JOIN products ON

buyers.pid=products.id";

// Execute a SQL statement

$connection->query($sql);

// Get the last profile in the profiler

$profile = $profiler->getLastProfile();

echo "SQL Statement: ", $profile->getSQLStatement(), "\n";

echo "Start Time: ", $profile->getInitialTime(), "\n";

echo "Final Time: ", $profile->getFinalTime(), "\n";

echo "Total Elapsed Time: ", $profile->getTotalElapsedSeconds(), "\n";

url

phalcon mysql_Phalcon 数据库操作总结相关推荐

  1. Python的数据库操作(Sqlalchemy)

    ORM 全称 Object Relational Mapping, 翻译过来叫对象关系映射.简单的说,ORM 将数据库中的表与面向对象语言中的类建立了一种对应关系.这样,我们要操作数据库,数据库中的表 ...

  2. 便捷,轻巧的Groovy数据库操作

    本文主要介绍Groovy对数据的CRUD操作,熟悉groovy.sql包,测试使用的数据库是H2. 1.数据库连接配置 //数据库连接配置 def db = [url:'jdbc:h2:mem:gro ...

  3. Django模型之数据库操作-查询

    六.数据库操作-查询 6.1基础条件查询 1 基本查询 get查询单一结果,如果不存在会抛出模型类.DoesNotExist异常. all查询多个结果.[返回的所有结果是列表] count查询结果数量 ...

  4. 命令行客户端MySQL基本命令的使用(登录、登出、数据库操作的SQL语句、表结构的SQL语句、表数据操作的SQL语句)

    1. 登录和登出数据库 登录数据库: 输入下面命令: mysql -uroot -p 说明: -u 后面是登录的用户名  [写成-u root也是可以的] -p 后面是登录密码, 如果不填写, 回车之 ...

  5. .ne中的控制器循环出来的数据如何显示在视图上_Web程序设计-ASP.NET MVC4数据库操作实例...

    ASP.NET MVC4数据库操作实例 之前文章介绍了MVC4与Pure框架结合进行的网页设计过程中如何定义控制器.方法.模型.视图等.并使用实例进行了简单说明.本文将在此基础上进一步说明如何使用MV ...

  6. oracle可以面向对象吗,Jbdc助手-数据库操作面向对象的实现(oracle)

    前言: 如果你对hibernate不是那样的推崇,但感觉jdbc的sqlr操作又不是那么OO的话,那么这篇文章可能给能带来或多或少的期望- 在很长的一段时间里,中总感觉应该对sql的操作来实现一种集成 ...

  7. yii mysql数据库操作_Yii2数据库操作常用方法小结

    本文实例讲述了Yii2数据库操作常用方法.分享给大家供大家参考,具体如下: 查询: // find the customers whose primary key value is 10 $custo ...

  8. mfc 访问局域网mysql_数据库操作:MFC连接与MYSQL

    数据库操作:MFC连接与MYSQL mysql 与MFC通常情况下都是用ODBC或者是是ADO相连接,但有点伤 我直接找网上的教程,仿照着进行连接,试了n边还是只能连接上,但无法进行如图读取,写入的操 ...

  9. 数据库操作(使用FMDB)

    iOS中原生的SQLite API在使用上相当不友好,在使用时,非常不便.于是,就出现了一系列将SQLite API进行封装的库,例如FMDB.PlausibleDatabase.sqlitepers ...

  10. apache2.4.9 开启path_info访问_【第一篇】ASP.NET MVC快速入门之数据库操作(MVC5+EF6)...

    新建项目 打开VS2015,找到菜单项[文件->新建->项目],打开向导对话框: 注意我们的选择项: 运行平台:.NET FrameWork 4.5 项目模板:ASP.NET Web Ap ...

最新文章

  1. python常用字符大全_python字符串,列表,字典,集合的常用方法
  2. php获取页面a标签内容_AKCMS常用标签代码整理
  3. python程序经常被杀死之谜
  4. 计算机网络面试题整理
  5. 安装Apache的步骤
  6. Beta冲刺博客集合贴
  7. 【差分】Tallest Cow(poj 3263/luogu 2879)
  8. 去除aspx生成的页面最开始的空行
  9. Java核心类库篇3——util
  10. php声明js变量类型,js中变量是什么以及有哪些类型
  11. RSAC 2021:厂商发布概述
  12. Maya Python脚本入门
  13. 街篮中服务器维修什么时候能结束,街头篮球手游1月6日微信iOS维护公告 服务器扩容...
  14. C++20 标准正式发布
  15. python用matplotlib画折线图
  16. matlab去除图像背景,从图像中移除背景(首选MATLAB、Java或Python)
  17. SQL Server 如何判断PLE (页面的预期寿命)
  18. 面经02-深信服面试
  19. 通过小程序和微信社群来构建产品运营体系
  20. 瑞吉外卖【用户移动端】

热门文章

  1. OpenGL 和 DirextX
  2. pcf8591c语言编程,学51单片机-基于PCF8591的AD采样和DA输出
  3. APP安全性检查报告整改
  4. iOS版本兼容以及部分iOS 11适配
  5. 浅谈网络安全之内存取证
  6. 上市公司环境信息披露合集-上市公司环保补助金额、环保税等三大维度指标(2003-2020年)
  7. 虎牙年报披露2019年扭亏为盈 腾讯操持下与斗鱼合并倒计时?
  8. 笔记本和利用服务器算力直连,使用闲置服务器的CPU算力挖掘Monero—Windows篇
  9. AUTOSAR DCM
  10. CCD(像素)与视觉系统的基础知识