簡體   English   中英

我如何通過電子郵件向自己發送此php函數生成的RAW SQL查詢?

[英]How can I email myself the RAW SQL query that this php function is producing?

我想對一個緩慢的查詢運行解釋,但是我不知道如何查看原始sql,因此我可以在phpmyadmin中運行它並調試它。 這是功能。

    private function getAttImages($limit, $forumIds = 0, $fidsReverse = false, $topicIds = 0, $membersIds = 0, $order = 'attach_date', $sort = 'desc', $group = null)
{
    $fids = '';

    if ($forumIds)
    {
        $r = '';
        if ($fidsReverse)
        {
            $r = ' NOT ';
        }

        if (is_array($forumIds))
        {
            $forumIds = implode(',', $forumIds);
        }

        $fids = ' AND forums_topics.forum_id ' . $r . ' IN (' . $forumIds .  ')';
    }

    $tids = '';
    if ($topicIds)
    {
        $tids = ' AND forums_topics.tid IN (' . $topicIds . ')';
    }

    $mids = '';
    if ($membersIds)
    {
        $mids = ' AND core_attachments.attach_member_id IN (' . $membersIds . ')';
    }


    $whereT = array();
    $joinsT = array();

    $findInPosts = ' AND ' . \IPS\Db::i()->findInSet('queued', array('0'));
    $joinsT[] = array(
                        'select'    => 'forums_posts.*',
                        'from'      => 'forums_posts',
                        'where'     => array("forums_posts.pid=core_attachments_map.id2" . $findInPosts),
                );

    $findInTopics = ' AND ' . \IPS\Db::i()->findInSet('approved', array('1'));
    $joinsT[] = array(
                        'select'    => 'forums_topics.*',
                        'from'      => 'forums_topics',
                        'where'     => array("forums_topics.tid=forums_posts.topic_id" . $findInTopics . $fids . $tids),
                );

    $select = 'core_attachments.attach_id AS custom_data, core_attachments.*';
    if ($group)
    {
        $select = 'core_attachments.attach_id AS custom_data, COUNT(attach_is_image) as cnt_images, SUM(attach_hits) as summ_attach_hits, core_attachments.*';
    }

    $joinsT[] = array(
                        'select'    => $select,
                        'from'      => 'core_attachments',
                        'where'     => array('core_attachments.attach_is_image=1 AND core_attachments.attach_is_archived=0 AND core_attachments.attach_id=core_attachments_map.attachment_id' . $mids),

                );              

    $joinsT[] = array(  'select'    => 'core_members.member_id, core_members.member_group_id, core_members.mgroup_others, core_members.name, core_members.members_seo_name',
                        'from'      => 'core_members',
                        'where'     => array('core_attachments.attach_member_id=core_members.member_id' . $mids),
                );

    $joinsT[] = array(  'select'    => 'core_permission_index.perm_id',
                        'from'      => 'core_permission_index',
                        'where'     => array("core_permission_index.app='forums' AND core_permission_index.perm_type='forum' AND core_permission_index.perm_type_id=forums_topics.forum_id"),
                );

    $groupT = $group;

    $whereT[] = array(
        "core_attachments_map.location_key='forums_Forums' AND " . 
        \IPS\Db::i()->findInSet('perm_view', array_merge(array(\IPS\Member::loggedIn()->member_group_id), array_filter(explode(',', \IPS\Member::loggedIn()->mgroup_others)))) . " OR perm_view='*'" .
        $fids . $tids . $mids
    );

    $table = new \IPS\Helpers\Table\Db(
        'core_attachments_map',
        \IPS\Http\Url::internal('app=core&module=system&controller=nbattachpictures', 'front', 'nbattachpictures'),
        $whereT,
        $groupT
    );

    $table->joins = $joinsT;
    $table->sortBy = $order;
    $table->sortDirection = $sort;
    $table->limit = $limit;

    $table->rowsTemplate = array(\IPS\Theme::i()->getTemplate('plugins', 'core', 'global'), 'nbAttachmentsBlocksRows');

    $table->parsers = array(
        'custom_data' => function( $val, $row )
        {
            return array(
                'topic_data' => \IPS\Http\Url::internal("app=forums&module=forums&controller=topic&id={$row['tid']}", 'front', 'forums_topic', array($row['title_seo'])),
                'summ_attach_hits' => $row['summ_attach_hits'],
                'jewel' => $this->attachJewel($row['summ_attach_hits']),
            );
        },
    );

    return $table;
}

有人知道我怎么才能看到此函數產生的SQL查詢? 電子郵件比echo更好,因為我想從實時站點中獲取查詢。

您可以使用本地php mail功能將var_dump($table)並將結果寫入電子郵件中,或將其寫入日志文件中(此選項更好)。

該框架是開源的嗎? 因為我找不到有關\\IPS\\Helpers\\Table\\Db類的任何文檔。 可能其中有一個方法可以構建查詢,您可以在該類源代碼中查找該方法,然后將該方法的結果放入電子郵件或日志文件中,而不是將var_dump放入表中。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM