当前位置: 首页 > 知识库问答 >
问题:

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

宇文飞羽
2023-03-14

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

{“code”:500,“url”:“/VOI2/API/states/Alabama/2/10.json”,“name”:“SQLSTATE[42S22]:

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个答案

艾谦
2023-03-14

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

通过使用“自定义”查询,CakePHP不会阻止SQL注入,您需要“手工”完成操作,最终会导致许多问题;

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

App/Model/State.php

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

app/Model/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

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

连接表

注意:我还没有测试这些示例,它可能会起作用,否则这是一个很好的开始

吴哲
2023-03-14

在WHERE子句中不允许使用别名。请参阅列别名的问题和你能在mysql的WHERE子句中使用别名吗?

 类似资料:
  • 关于,我正在使用主键=idusuarios的同一视图更新一个名为usuarios的表,insert使我完美地解决了问题,因为当我要更新时,它会生成错误 SQLSTATE[42S22]:找不到列: 1054未知列'usuarios.id'in'where子句'(SQL: Select*fromwhere. 这是我的密码 模型 类Usuario扩展模型{ 另一张表的模型 控制器 公理

  • 在多供应商网站上工作。当商店/供应商用户想登录时突然得到这个错误没有问题普通用户这里有两种类型用户一种是供应商或商店老板/另一种普通客户当供应商想登录时得到这个错误。但正常用户没有问题面临的登录。添加新列,但问题是继续SQL完整性错误。 这是登录控制器。 登录控制器的详细信息 路线 车间管理控制员 商店管理模式 **店铺模型** 错误

  • 我使用的框架Laravel。 我有两个表(用户和成员)。当我想登录时,我会收到错误消息: SQLSTATE[42S22]:找不到列: 1054未知的列'user_email'in'where子句'(SQL:选择*fromwhere=?限制1)(绑定:数组(0= 表用户 表成员 迁移用户 移民成员 模型用户 模范会员 成员模型使用:使用照明\Auth\UserInterface; 控制器 auth.

  • 我是编程界的新手,我自己在学习laravel,我发现了这个错误:SQLSTATE[42S22]:Column not found:1054未知列'clientes.clientes\u id'在'where子句中(SQL:select*fromwhere=1和不为空)(视图:/shared/httpd/laravel_8_crud/resources/views/pedidos/index.bla

  • 我正在制作一个我想登录和注册的应用程序,并且能够将csv文件导入数据库,注册和登录工作正常,但是当我想导入csv时,我遇到了这个问题: 错误luminate\Database\QueryException SQLSTATE[42S22]:未找到列:1054“where子句”中的未知列“classe”(SQL:select*fromwhere(=7和=7598)限制1)科目表 账户控制员

  • 我正在尝试使用PDO向MySQL插入一条记录,下面的代码中可以看到我的sql语句。 当执行此代码时,我会遇到以下错误消息; SQLState[42S22]:找不到列:1054“Field List”中的未知列“John” 这无疑是解决这个问题的一个简单方法,但我似乎看不出来,有人能给我指明正确的方向吗?