php - 如何在 Phalconphp 中查看 SQL 语句?

标签 php database phalcon

我想查看下面即将执行的SQL语句:

<?php

 //Deleting existing robot
 $success = $connection->delete(
     "robots",
     "id = 101"
 );

 //Next SQL sentence is generated
 DELETE FROM `robots` WHERE `id` = 101

如何添加某种监听器或只是简单的 var_dump 将由 $connection->delete 生成的选择查询

谢谢

最佳答案

我决定使用记录器类和事件系统:Phalcon Events Manager

您创建一个扩展记录器适配器的类

<?php

namespace PhalconX\Logger\Adapter;

/**
 * Basic Array based Logging for debugging Phalcon Operations
 * @package PhalconX\Logger\Adapter
 */
class Basic extends \Phalcon\Logger\Adapter
{
    private $data = array();

    /**
     * Add a statement to the log
     * @param string $statement
     * @param null $type
     * @param array $params
     * @return $this|\Phalcon\Logger\Adapter
     */
    public function log($statement, $type=null, array $params=null)
    {
        $this->data[] = array('sql'=>$statement, 'type'=>$type, 'params'=>$params); // array('sql'=>$statement, 'type'=>$type);
        return $this;
    }

    /**
     * return the log
     * @return array
     */
    public function getLog(){
        return $this->data;
    }

    /**
     * Required function for the interface, unused
     * @param $message
     * @param $type
     * @param $time
     * @param $context
     */
    public function logInternal($message, $type, $time, $context){

    }

    /**
     * Required function for the interface, unused
     */
    public function getFormatter(){

    }

    /**
     * Required function for the interface, unused
     */
    public function close(){

    }
}

然后将其附加到您的数据库,并按类型探索事件

$eventsManager = new \Phalcon\Events\Manager();
$logger = new \PhalconX\Logger\Adapter\Basic();
$profiler = $phalconDi->getProfiler();
//Listen all the database events

/** @var $event \Phalcon\Events\Event */
/** @var $phalconConnection \Phalcon\Db\Adapter\Pdo\Mysql */

$eventsManager->attach('db', function($event, $phalconConnection) use ($logger, $profiler) {
    if ($event->getType() == 'beforeQuery') {
        $profiler->startProfile($phalconConnection->getSQLStatement());
        $logger->log($phalconConnection->getSQLStatement(), \Phalcon\Logger::INFO, $phalconConnection->getSQLVariables());
    }
    if ($event->getType() == 'afterQuery') {
        $profiler->stopProfile();
    }
});

这假设您的依赖注入(inject)器中有一个“db”键。

我的记录器只是将查询存储在一个数组中,这样我就可以在页面底部输出它们。

关于php - 如何在 Phalconphp 中查看 SQL 语句?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24886296/

相关文章:

php - 在 WooCommerce 3.1 中更改 wc_empty_cart_message 函数

python - 磁盘空间效率最高的内存映射字典,用于 2000 万个键值对,速度不是太关心的问题

sql-server - 如何在没有数据的情况下以编程方式复制 SQL Server 中的表?

windows - Phalcon 在 Docker 中的安装

php - 在表单字段旁边显示表单错误

php - 如何将值从一页传递到另一页,然后进一步传递到第三页

php - 如果表中不存在ID,则在表中插入多条记录

php - 在 Laravel 中有没有办法向请求数组添加值?

database - 如何在 nestJS 框架中注入(inject)纯数据库(无 ORM)?

php - 503 Service Unavailable after brew install 并重启apache2