CakePHP 2 - 为什么我在模型函数中出现sql错误?

时间:2012-02-20 13:46:45

标签: sql cakephp model cakephp-2.0

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

我得到的错误是:

  

错误: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}

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

1 个答案:

答案 0 :(得分:0)

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

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