错误:SQLSTATE [42S22]:找不到列:1054 where子句中的未知列

时间:2013-04-04 08:40:44

标签: php mysql cakephp

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

  

{“code”:500,“url”:“/ VOI2 / API / states / Alabama / 2 / 10.json”,“name”:“SQLSTATE [42S22]:>未找到列:1054未知列'where'在'where>子句'“,”错误“:{”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'));  
}

问题是另一个带有模型/控制器的表。我希望以有意义的方式设置网址是我选择将状态与问题分开的原因。 感谢你的帮助。

2 个答案:

答案 0 :(得分:0)

不允许在WHERE子句中使用别名。请参阅Problems with Column AliasesCan you use an alias in the WHERE clause in mysql?

答案 1 :(得分:0)

您应该按照CakePHP的预期使用您的模型。请参阅Retrieving Your Data

通过使用'自定义'查询,CakePHP不会阻止SQL注入,你需要“手动”做事,导致长期存在许多问题;

此外,由于您要显示所有问题,但要对其所属的状态进行过滤,您应该从Issue模型中检索数据,而不是State

指定模型关系

应用程序/型号/ State.php

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

应用程序/型号/ 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

手动连接表格/模型

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

Joining tables

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