【问题标题】:CakePHP 2 - Why am i getting sql error in model function?CakePHP 2 - 为什么我在模型函数中出现 sql 错误?
【发布时间】:2012-02-20 13:46:44
【问题描述】:

我正在尝试通过我的控制器和模型进行最简单的调用,但它不起作用。

我得到的错误是:

错误:SQLSTATE[42000]:语法错误或访问冲突:1064 你 您的 SQL 语法有错误;检查对应的手册 您的 MySQL 服务器版本,以便在附近使用正确的语法 第 1 行的“ppLongerFunction2”

控制器代码为:

<?php

class UsersController extends AppController{
public $uses = array('User');

function test(){
    $blah = $this->User->find('all');
    $u = $this->User->ppLongerFunction2();
    $this->set(compact('blah', 'u'));
}
}

模型是:

<?php
class User extends AppModel{
public var $name = 'User';
var $displayField = 'username';

var $useTable = 'users';

public function ppLongerFunction2(){
    $something = $this->find('all');
    return $something;
}
}

我在哪里搞砸了?

堆栈跟踪:

#0 C:\wamp\www\lib\Cake\Model\Datasource\DboSource.php(436): PDOStatement->execute(Array)
#1 C:\wamp\www\lib\Cake\Model\Datasource\DboSource.php(403): DboSource->_execute('ppLongerFunctio...', Array)
#2 C:\wamp\www\lib\Cake\Model\Datasource\DboSource.php(647): DboSource->execute('ppLongerFunctio...', Array, Array)
#3 C:\wamp\www\lib\Cake\Model\Datasource\DboSource.php(589): DboSource->fetchAll('ppLongerFunctio...', Array, Array)
#4 C:\wamp\www\lib\Cake\Model\Model.php(720): DboSource->query('ppLongerFunctio...', Array, Object(AppModel))
#5 C:\wamp\www\app\Controller\UsersController.php(11): Model->__call('ppLongerFunctio...', Array)
#6 C:\wamp\www\app\Controller\UsersController.php(11): AppModel->ppLongerFunction2()
#7 [internal function]: UsersController->test()
#8 C:\wamp\www\lib\Cake\Controller\Controller.php(473): ReflectionMethod->invokeArgs(Object(UsersController), Array)
#9 C:\wamp\www\lib\Cake\Routing\Dispatcher.php(104): Controller->invokeAction(Object(CakeRequest))
#10 C:\wamp\www\lib\Cake\Routing\Dispatcher.php(86): Dispatcher->_invoke(Object(UsersController), Object(CakeRequest), Object(CakeResponse))
#11 C:\wamp\www\app\webroot\index.php(96): Dispatcher->dispatch(Object(CakeRequest), Object(CakeResponse))
#12 {main}

全部修复。这是一个文件名。感谢您的帮助:|笨蛋

【问题讨论】:

  • 它创建的 SQL 查询是什么? (如果您还没有安装 DebugKit,它是任何 CakePHP 项目的必备工具,它可以轻松地为您提供所有这些信息 - 变量、mysql 查询运行......等等)
  • 另外,可能不是主要问题,但您不需要 $uses 用户,因为您在用户控制器中。
  • 我没有debutKit,另外,我可以给你看查询吗?
  • 你真的应该得到 DebugKit - 100% 肯定你不会后悔的。要在视图中显示您最近的 SQL 查询,请使用:&lt;?php echo $this-&gt;element('sql_dump'); ?&gt;。 (确保在 Config/core.php 文件中将 Debug 设置为 2。)
  • 我确实安装了它,但它似乎不适用于 CakePHP 2 :(。我发现模型中的函数根本没有被调用。我放了一个 die('here') 和没死,Controller找不到模型函数...

标签: sql cakephp model cakephp-2.0


【解决方案1】:

似乎正在发生的事情是您的控制器尝试调用模型的ppLongerFunction2(),但它没有在模型中定义,因此它作为 SQL 函数传递。

我相信发生的事情是您在某个地方错过了以下约定,并且找不到模型 (User.php) 的文件(可能是 user.php)。在这种情况下,cake 将在内部从 DB 表构建模型,并且显然不会包含该函数。您可以通过在模型中键入肯定会导致错误的虚假内容来检查是否是这种情况,例如缺少 ; 并查看是否出现错误。如果不是,则不会使用您的文件。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-07-24
    • 1970-01-01
    • 2019-06-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多