我正在尝试调试我的sql,但我很难过。我知道我可以用这个:
<?php echo $this->element('sql_dump'); ?>
转储sql但是如果我正在进行ajax调用,这不会(或者至少我不知道如何使用它)工作。由于页面未重新加载,因此转储不会刷新。如何运行我的命令并调试sql?这是我在控制器中的代码:
public function saveNewPolicy(){
$this->autoRender = false;
$policyData = $this->request->data["policyData"];
$numRows=0;
$data = array(
'employee_id' => trim($policyData[0]["employeeId"]),
'insurancetype_id'=> $policyData[0]["insuranceTypeId"],
'company' => $policyData[0]["companyName"],
'policynumber' => $policyData[0]["policyNumber"],
'companyphone' => $policyData[0]["companyPhone"],
'startdate'=> $policyData[0]["startDate"],
'enddate'=> $policyData[0]["endDate"],
'note' => $policyData[0]["notes"]
);
try{
$this->Policy->save($data);
$numRows =$this->Policy->getAffectedRows();
if($numRows>0){
$dataId = $this->Policy->getInsertID();
$response =json_encode(array(
'success' => array(
'msg' =>"Successfully Added New Policy.",
'newId' => $dataId
),
));
return $response;
}else{
throw new Exception("Unspecified Error. Data Not Save! ");
}
}catch (Exception $e){
return $this->EncodeError($e);
}
}
问题是如果我的数组中的公司字段为空,为空,则插入将失败而没有任何错误。我知道它失败了,因为我使用了numrows变量。我知道该字段在数据库中接受空值。对我来说,调试它的唯一方法就是查看发送给MySql的SQL。有谁知道如何调试它?我正在使用CakePhp 2.4
答案 0 :(得分:1)
我使用这种方法。我在AppModel类中添加了这个方法:
public function getLastQuery() {
$dbo = $this->getDatasource();
$logs = $dbo->getLog();
$lastLog = end($logs['log']);
return $lastLog['query'];
}
然后在你称之为的任何控制器中:
debug($this->{your model here}->getLastQuery());
答案 1 :(得分:0)
不是试图在CakePHP中进行攻击,也许只使用MySQL记录查询并在日志文件上执行tail -f会更容易?以下是如何实现这一目标:
SHOW VARIABLES;
并查找general_log
和general_log_file
条目SET GLOBAL general_log = 'ON';
将其打开tail -f logfile.log
(日志文件位置在general_log_file
条目中)以获取日志的流式视图,因为它已写入这对于这些情况非常有用,可以看到幕后发生了什么,或者出于某种原因你是否已经调试过。