错误:SQLSTATE[42S22]: Column not found: 1054 where子句中未知列


Error: SQLSTATE[42S22]: Column not found: 1054 Unknown column in where clause

这个函数有问题。它应该返回使用下面的sql调用收集的json数据字符串。问题是,我得到一个错误代码"500"时,通过我的服务器访问页面(例如- localhost/app/API/states/Alabama/1/10.json)。奇怪的是,数据在使用.json和没有附加.json的情况下都按照预期显示。据我所知,控制器和模型设置得很好,但错误代码仍然存在:

{"代码":500年,"url":"/VOI2/API/国家/阿拉巴马州/2/10。json","name":"SQLSTATE[42S22]:>Column not found: 1054 Unknown Column 'states'in 'where>子句'","error":{"errorInfo":["42S22",1054," where>子句中的未知列'状态'"]

public function index($stateName, $page, $limit = 10, $user = null) {
$this->State->recursive = 0;
$limit;
$set_limit = $page * $limit - ($limit);
$states = $this->State->query("SELECT * 
FROM states, issues
WHERE stateName =  '" . $stateName ."'
AND issues.state_id = states.id LIMIT " .  $set_limit . "," . $limit)       
$this->set('states', $this->paginate($states));
$this->set('_serialize', array('states'));  
}

Issues是另一个带有model/controller的表。我希望以一种有意义的方式设置url,这就是为什么我选择将状态与问题分开的原因。谢谢大家的帮助。

WHERE子句不允许使用别名。参见问题与列别名和你可以使用别名在mysql的WHERE子句?

您应该按照CakePHP的意图使用您的模型。参见检索数据。

通过使用"自定义"查询,CakePHP不会阻止sql注入,你需要"手工"做事情,导致许多问题;

此外,因为您想显示所有问题,但在状态上对它们进行过滤,因此您应该从Issue模型检索数据,而不是从State

检索数据。

指定model-relations

app/模型/State.php

class State extends AppModel {
    public $hasMany = array(
        'Issue'
    );
}

app/模型/Issue.php

class Issue extends AppModel {
    public $belongsTo = array(
        'State'
    );
}

要对数据分页,请参见Pagination

在控制器内部:

class MyController extends AppController {
    public $paginate = array(
        'Issue' => array(
            // Default limit, can be overridden via 'limit' named parameter
            // e.g. /MyController/index/limit:20
            'limit' => 10,
            // Probably required to get 'State' in the results
            'recursive' => 1,
        );
    );
    
    public function index($stateName)
    {
        $conditions = array(
            'State.stateName' => $stateName
        );
    
        // I'll leave this name for now, better call it 'issues'?
        $states = $this->paginate('Issue', conditions)
    
        $this->set('states', states);
        $this->set('_serialize', array('states'));
    }
}

要显示分页数据,还应该使用PaginatorHelper

手动连接表/模型

如果默认的模型关系不符合您的要求,您可以手动将表连接在一起;请参阅文档中的本章:

加入表

注意:我还没有测试过这些例子,它可能工作,否则它是一个很好的起点,让你进入