Я хочу отслеживать ошибки на производственном сайте, если функция вставки или обновления не работает.
Чтобы проверить эту функциональность, я добавил в свой контроллер функцию: —
function testSqlStatement(){
$this->autoRender = false;
$save=array('UserId'=>'48','Active'=>'qw');
$this->User->saveAll($save);
$log = $this->getDataSource()->error;
$this->log('sql error' . print_r($log, true), 'sql');
}
я получаю ошибку: — вызов неопределенного метода AdminsController :: getDataSource ()
где я должен определить источник getdatasource? есть ли другой способ узнать ошибку, не изменяя отладку на 2
Вы используете следующий способ:
Обратный вызов onError вызывается классом DboSource в методах create (), read (), update () и delete (). Итак, если вы пишете пользовательский запрос и вызываете его через метод query () модели, onError () не будет вызываться автоматически, но не беспокойтесь, вы все равно можете отслеживать ошибки SQL. Эти методы CRUD вместе с query (), в свою очередь, используют метод execute (), который устанавливает ошибку SQL для переменной класса с именем «error»
Методы lastError () уже реализованы в каждом источнике DBO (mysql, mssql и т. Д.).
Давайте двигаться вперед, чтобы написать нашу модель обратного вызова. Пример кода для регистрации ошибки в текстовом файле будет выглядеть примерно так:
<?php
function onError()
{
// The SQL error
$error = $this->getDataSource()->error;
// Log file
$logFile = LOGS . 'sql_errors.txt';
// Log the error
file_put_contents($logFile, file_get_contents($logFile) . $error . "\n\n");
}
Этот код может идти в вашей app_model.
Еще один пример кода для отправки сообщения об ошибке будет что-то вроде
function onError()
{
// The SQL error
$error = $this->getDataSource()->error;
// Send the error
mail('[email protected]', 'SQL errors', $error);
}
Ваша проблема в том, что вы звоните $this->getDataSource
когда $this
имеет в виду контроллер, а не модель. Ты хочешь $this->User->getDataSource()
вместо:
function testSqlStatement(){
$this->autoRender = false;
$save = array('UserId'=>'48','Active'=>'qw');
$this->User->saveAll($save);
$log = $this->User->getDataSource()->error;
$this->log('sql error' . print_r($log, true), 'sql');
}