Как увидеть операторы MySQL и ошибки (если есть) в оболочке CakePHP - PullRequest
1 голос
/ 11 ноября 2010

Я использую CakePHP 1.3 и пишу собственные оболочки для запуска мирских задач в cronjobs.Время от времени я вижу сбой Model-> save (), но все равно не знаю, в чем именно заключается проблема.

Есть ли способ отобразить действительные операторы SQL и предупреждения / ошибки, возвращенные MySQL в оболочке CakePHP?

Спасибо.

Ответы [ 5 ]

2 голосов
/ 12 апреля 2011

Вы можете использовать следующую задачу дампа SQL для оболочек.

http://bakery.cakephp.org/articles/carcus88/2011/04/08/sql_dump_task_for_shells

0 голосов
/ 28 марта 2013

В CakePHP 1.2 мне удалось отобразить запросы SQL в выводе моей консоли, добавив вызов Configure::write('debug', 2); в конец метода __bootstrap в файле cake / console / cake.php.

Нет необходимости возиться с определенным вызовом функции dump_sql, как некоторые из этих ответов, я просто автоматически получаю обычные запросы, как в нижней части веб-страницы.

0 голосов
/ 07 декабря 2010

Я нашел способ сделать это. В вашей оболочке добавьте:

function initialize()
{
    Configure::write('debug', 2);
    $this->_loadDbConfig();
    $this->_loadModels();
}

Затем, когда вы захотите посмотреть журнал, вызовите эту функцию:

    function dump_sql()
    {
        $sql_dump = '';

    if (!class_exists('ConnectionManager') || Configure::read('debug') < 2)
        return false;

    $noLogs = !isset($logs);
    if ($noLogs)
    {
        $sources = ConnectionManager::sourceList();

        $logs = array();
        foreach ($sources as $source):
        $db =& ConnectionManager::getDataSource($source);
        if (!$db->isInterfaceSupported('getLog')):
            continue;
        endif;
        $logs[$source] = $db->getLog();
        endforeach;
    }

    if ($noLogs || isset($_forced_from_dbo_))
    {
        foreach ($logs as $source => $logInfo)
        {
            $text = $logInfo['count'] > 1 ? 'queries' : 'query';
            $sql_dump .= "cakeSqlLog_" . preg_replace('/[^A-Za-z0-9_]/', '_', uniqid(time(), true));
            $sql_dump .= '('.$source.') '. $logInfo['count'] .' '.$text. ' took '.$logInfo['time'].' ms';
            $sql_dump .= 'Nr Query Error Affected Num. rows Took (ms)';

            foreach ($logInfo['log'] as $k => $i)
            {
                $sql_dump .= $i['query'];
            }
        }
    }
    else
    {
        $sql_dump .= 'Encountered unexpected $logs cannot generate SQL log';
    }
 }
0 голосов
/ 04 апреля 2011

Еще одним подходом было бы иметь все ваши пользовательские запросы в моделях / поведениях, и просто вызывать данные / обновления из оболочек. Это даст вам дополнительное преимущество, если вы сможете повторно использовать этот пользовательский SQL в других частях проекта. Например, в модульных тестах.

0 голосов
/ 12 ноября 2010

Один из способов сделать это - просмотреть файл журнала MySQL в отдельном терминале.

Здесь перечислены несколько способов сделать это:

Вход в MySQL Query Loging inCakePHP

...