php – 如何在Phalcon中回显最后一个查询字符串?

我在codeigniter上做了很多工作.在codeigniter中,如果需要获取后执行查询字符串,我们可以使用:

echo $this->db->last_query();
exit;

但目前我正在研究phalcon,我刚刚在这个框架中处于初级阶段.我很好奇是否有办法在phalcon中回显最后一个查询字符串.

谢谢.

解决方法:

使用原始查询

我们有以下查询

$phql = 'UPDATE `news` SET `category_id` = 5 WHERE `id` = :id';
$this->db->execute($phql, ['id' => 1]);

我们可以使用以下方法获取调试查询信息:

print_r($this->db->getsqlStatement());

UPDATE news SET category_id = 5 WHERE id = :id

print_r($this->db->getsqlVariables());

Array (
[id] => 1 )

有关DB方法的更多信息,您可以在这里找到:https://docs.phalconphp.com/en/latest/api/Phalcon_Db_Adapter_Pdo.html

使用模型

设置数据库连接和分析器服务:

use Phalcon\Db\Profiler as ProfilerDb;
use Phalcon\Events\Manager as EventsManager;
use Phalcon\Db\Adapter\Pdo\MysqL as MysqLPdo;

$di->set('profiler', function () {
    return new ProfilerDb();
}, true);

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

    $eventsManager = new EventsManager();

    // Get a shared instance of the DbProfiler
    $profiler      = $di->getProfiler();

    // Listen all the database events
    $eventsManager->attach('db', function ($event, $connection) use ($profiler) {
        if ($event->getType() == 'beforeQuery') {
            $profiler->startProfile($connection->getsqlStatement());
        }

        if ($event->getType() == 'afterQuery') {
            $profiler->stopProfile();
        }
    });

    $connection = new MysqLPdo(
        array(
            "host"     => "localhost",
            "username" => "root",
            "password" => "secret",
            "dbname"   => "invo"
        )
    );

    // Assign the eventsManager to the db adapter instance
    $connection->setEventsManager($eventsManager);

    return $connection;
});

用它来调试你的查询

// Send some sql statements to the database
Robots::find();
Robots::find(
    array(
        "order" => "name"
    )
);
Robots::find(
    array(
        "limit" => 30
    )
);

// Get the generated profiles from the profiler
$profiles = $di->get('profiler')->getProfiles();

foreach ($profiles as $profile) {
   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";
}

有关Profiler服务的更多信息:https://docs.phalconphp.com/en/latest/reference/models.html#profiling-sql-statements

Phalcon Prophiler小工具

我正在为FabianFülling制作的Phalcon使用一个可爱的调试小部件.您可以在此处查看存储库:https://github.com/fabfuel/prophiler以下操作窗口小部件的示例屏幕截图:

enter image description here

相关文章

统一支付是JSAPI/NATIVE/APP各种支付场景下生成支付订单,返...
统一支付是JSAPI/NATIVE/APP各种支付场景下生成支付订单,返...
前言 之前做了微信登录,所以总结一下微信授权登录并获取用户...
FastAdmin是我第一个接触的后台管理系统框架。FastAdmin是一...
之前公司需要一个内部的通讯软件,就叫我做一个。通讯软件嘛...
统一支付是JSAPI/NATIVE/APP各种支付场景下生成支付订单,返...