我使用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'));
}
}
}
答案 0 :(得分:2)
由于某种原因,CakePHP未使用您的User
模型,或者register()
方法不存在。 CakePHP将执行不存在的方法作为SQL语句。如果未使用 Model ,CakePHP将根据您的AppModel
要发现是否找不到User
模型,请尝试此操作;
public function add()
{
debug(get_class($this->User));
// ....
}
这应输出User
。如果它输出AppModel
或Model
,那么CakePHP正在使用通用模型,这表示它找不到您的用户模型。
app/tmp/cache/models
和app/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.php
和app/Controller/UsersController.php
)
我保留了上面的原始建议,因为它们在其他情况下仍然有用
答案 1 :(得分:0)
您应该针对用户表检查$this->request->data
中的内容,可能某些值不合法