使用CakeDC用户插件时出现错误PDO异常SQLSTATE [42000]

时间:2013-04-07 06:47:12

标签: cakephp cakephp-2.0 cakephp-2.1 cakephp-appmodel cakedc

我使用cakephp 2.2.1并尝试使用cakedc用户插件,当我尝试创建用户时出现以下错误,任何人都可以提供一些提示或建议来解决此错误 - 我已经使用了迁移插件。提前致谢 :)。

2013-04-07 06:31:33 Error: [PDOException] SQLSTATE[42000]: Syntax error or access violation: 1064 You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'register' at line 1
#0 C:\wamp\www\toppin\lib\Cake\Model\Datasource\DboSource.php(459): PDOStatement->execute(Array)
#1 C:\wamp\www\toppin\lib\Cake\Model\Datasource\DboSource.php(425): DboSource->_execute('register', Array)
#2 C:\wamp\www\toppin\lib\Cake\Model\Datasource\DboSource.php(669): DboSource->execute('register', Array, Array)
#3 C:\wamp\www\toppin\lib\Cake\Model\Datasource\DboSource.php(611): DboSource->fetchAll('register', Array, Array)
#4 C:\wamp\www\toppin\lib\Cake\Model\Model.php(788): DboSource->query('register', Array, Object(User))
#5 C:\wamp\www\toppin\app\Plugin\Users\Controller\UsersController.php(331): Model->__call('register', Array)
#6 C:\wamp\www\toppin\app\Plugin\Users\Controller\UsersController.php(331): User->register(Array)
#7 [internal function]: UsersController->add()
#8 C:\wamp\www\toppin\lib\Cake\Controller\Controller.php(485): ReflectionMethod->invokeArgs(Object(UsersController), Array)
#9 C:\wamp\www\toppin\lib\Cake\Routing\Dispatcher.php(186): Controller->invokeAction(Object(CakeRequest))
#10 C:\wamp\www\toppin\lib\Cake\Routing\Dispatcher.php(161): Dispatcher->_invoke(Object(UsersController), Object(CakeRequest), Object(CakeResponse))
#11 C:\wamp\www\toppin\app\webroot\index.php(92): Dispatcher->dispatch(Object(CakeRequest), Object(CakeResponse))
#12 {main}

添加功能:

public function add() {
        if ($this->Auth->user()) {
            $this->Session->setFlash(__d('users', 'You are already registered and logged in!'));
            $this->redirect('/');
        }

        if (!empty($this->request->data)) {
            $user = $this->User->register($this->request->data);
            if ($user !== false) {
                $this->_sendVerificationEmail($this->User->data);
                $this->Session->setFlash(__d('users', 'Your account has been created. You should receive an e-mail shortly to authenticate your account. Once validated you will be able to login.'));
                $this->redirect(array('action' => 'login'));
            } else {
                unset($this->request->data[$this->modelClass]['password']);
                unset($this->request->data[$this->modelClass]['temppassword']);
                $this->Session->setFlash(__d('users', 'Your account could not be created. Please, try again.'), 'default', array('class' => 'message warning'));
            }
        }
    }

2 个答案:

答案 0 :(得分:2)

由于某种原因,CakePHP未使用您的User模型,或者register()方法不存在。 CakePHP将执行不存在的方法作为SQL语句。如果未使用 Model ,CakePHP将根据您的AppModel

自动创建模型

要发现是否找不到User模型,请尝试此操作;

public function add()
{
    debug(get_class($this->User));

    // ....
}

这应输出User。如果它输出AppModelModel,那么CakePHP正在使用通用模型,这表示它找不到您的用户模型。

  • 清除app/tmp/cache/modelsapp/tmp/cache/persistent目录,或者如果您正在使用APC,请清除用户缓存。
  • 如果您在控制器中使用多个模型,请检查User数组是否在$uses数组
  • 检查您的用户模型是否在此文件中:app/Model/User.php并且类名为User(单数,不是复数

另一方面,如果您的模型 已正确加载(调试示例显示User,而不是AppModel),请检查您是否确实拥有register() 1}}方法,如果没有,你应该创建if。

希望这有帮助。

[更新]

刚刚意识到您正在使用Users-plugin,并且可能正在加载错误的用户模型。使用插件时,您还需要使用插件中的User模型,而不是您自己的User模型。

如果您 拥有自己的用户模型,则应将其重命名为User以外的其他内容(例如AppUser),以防止CakePHP加载错误的模型。按照插件文档中有关如何扩展插件组件的说明进行操作:extending the Model

但是,如果您想从插件中扩展User模型,您还需要扩展插件的UsersController,请参阅Extending the Controller

如果您需要扩展插件 - 模型和控制器,最好从您的应用中删除它们(例如app/Model/User.phpapp/Controller/UsersController.php

我保留了上面的原始建议,因为它们在其他情况下仍然有用

答案 1 :(得分:0)

您应该针对用户表检查$this->request->data中的内容,可能某些值不合法