php - 数据库错误 Cakephp

标签 php mysql cakephp cakephp-2.0

保存数据时出现数据库错误

错误

SQLSTATE[42000]: Syntax error or access violation: 1064 You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ') GROUP BY s.state, s.indicator_datum_id) AS LatestStateUpdate ON' at line 4

SQL 查询:

SELECT IndicatorDatum.id, IndicatorDatumUpdate.*, (CONCAT(IndicatorDatum.indicator_id,'_',IndicatorDatum.report_year_id)) 
AS IndicatorDatum__indexKey FROM astest.indicator_data AS IndicatorDatum 
INNER JOIN (SELECT u.indicator_datum_id, MAX(u.created) as update_date, s.state 

FROM indicator_datum_states s 
INNER JOIN indicator_datum_updates u on u.id = s.indicator_datum_update_id 
WHERE s.indicator_datum_id IN () GROUP BY s.state, s.indicator_datum_id) AS LatestStateUpdate ON (IndicatorDatum.id = LatestStateUpdate.indicator_datum_id AND IndicatorDatum.state = LatestStateUpdate.state) 
INNER JOIN astest.indicator_datum_updates AS IndicatorDatumUpdate ON (IndicatorDatumUpdate.indicator_datum_id = LatestStateUpdate.indicator_datum_id AND IndicatorDatumUpdate.created = LatestStateUpdate.update_date) 
WHERE IndicatorDatum.id = (NULL)

我想知道我的代码中有什么错误(阅读食谱后)我理解传递给保存方法的数组应该是这样的

array(
    (int) 0 => array(
        'value' => '',
        'id' => '',
        'indicator_id' => '283',
        'report_year_id' => '7',
        'Assurance' => array(
            (int) 0 => '1',
            (int) 1 => '2',
            (int) 2 => '3',
            (int) 3 => '4',
            (int) 4 => '5'
        )
    ),
    (int) 1 => array(
        'value' => '',
        'id' => '',
        'indicator_id' => '283',
        'report_year_id' => '6',
        'Assurance' => ''))

但是当我调试我的代码时,我发现数据传递给了保存方法:

   array(
        'currentOrg' => array(
            'id' => '40'
        ),
        'IndicatorDatum' => array(
            '$cn' => array(
                'id' => '',
                'comment' => '',
                'reference' => ''
            ),
            (int) 0 => array(
                'value' => '',
                'Assurance' => ''
            ),
            (int) 1 => array(
                'value' => '',
                'Assurance' => ''
            ),
            (int) 2 => array(
                'value' => '',
                'Assurance' => ''
            ),
            (int) 3 => array(
                'value' => '',
                'Assurance' => ''
            ),

我的表单:

echo $this->DashboardForm->create('IndicatorDatum',array(
    'url' => array('controller'=>'indicator_data','action'=>'edit_group', 'dashboard'=>true, $thisGroup['IndicatorGroup']['id']),
    'novalidate'=>true
    ));
            <?  $cn = 0; 
            foreach ($years as $year) :
            echo $this->Form->hidden("IndicatorDatum.$cn.id");
            echo $this->Form->hidden("IndicatorDatum.$cn.state");
            echo $this->Form->input("IndicatorDatum.$cn.indicator_id",array(
                                                'type'=>'hidden', 'default'=>$iid
                                            )); 
        echo $this->Form->input("IndicatorDatum.$cnt.report_year_id",array(
                                            'type'=>'hidden', 'default'=>$yid
                                        )); 
            echo $this->Form->input('IndicatorDatum.$cn.value');                                   
            echo $this->Form->input("IndicatorDatum.$cn.Assurance", array('style'=>'width: 165px;',
                                                        'type'=>'select',
                                                        'multiple'=>true, 'options' => $assurances, 'selected' => $selected,'label' => false));
            $cn++;
            endforeach;

     echo $this->Form->submit(__('Save All'));

    ?>  

我的 Controller :

if ($this->request->is('post')|| $this->request->is('put')) {
            $data = debug($this->request->data);
                        if ($this->IndicatorDatum->saveAll($this->request->data)) {
                $this->Session->setFlash(__('The indicator data has been saved'), 'flash/success');
                $this->redirect(array('action'=>'edit_group',$group_id));
            } else {
                $this->Session->setFlash(__('The indicator data could not be saved. Please verify the fields highlighted in red and try again.'), 'flash/error');
            }
        }

最佳答案

您不应该通过任何未在 select 中指定的列,在这种情况下 s.state 和 s.indicator_datum_id 不会出现在 select 子句中。

关于php - 数据库错误 Cakephp,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30755359/

相关文章:

PHP chmod 权限被拒绝

mysql - SQL select语句,根据其他列计算列

MySQL按不同表中的多列求和排序

php - 烘焙模型 - CakePHP - Ubuntu

git - git add -f 后忽略修改

php - 在 Docker Swarm 模式下链接应用程序

php - 使用ajax从html表单更新数据库

html - 如何动态更改JSP中的按钮值属性

date - 如何更改 CakePHP 3 表单中出生日期字段的顺序

php - 是否存在测试超时的资源/服务器?