如果插入或更新功能不起作用,我想跟踪生产站点上的错误。
测试这个功能我已经在我的控制器中创建了一个功能: -
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
答案 0 :(得分:0)
您使用以下方式:
onError错误回调由create(),read(),update()和delete()方法中的DboSource类调用。因此,如果您正在编写自定义查询并通过模型的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('webmaster@example.com', 'SQL errors', $error);
}
答案 1 :(得分:0)
您的问题是,当$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');
}