Iam using cakephp 2.2.1 and trying to use the cakedc users plugin, when I try to create a user I get the following error, can anyone give some tips or advice to resolve this error - I have loaded all tables using the migrations plugin. Thanks in advance :).
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}
Add function:
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'));
}
}
}
For some reason, your
User
model is not being used by CakePHP or theregister()
method does not exist. CakePHP will execute non-existing methods as SQL statements. If a Model is not being used, CakePHP will automatically create a model, based on yourAppModel
To discover if the
User
model was not found, try this;This should output
User
. If it outputsAppModel
orModel
then CakePHP is using a generic model, which indicates that it couldn't find your User-model.app/tmp/cache/models
andapp/tmp/cache/persistent
directories, or if you're using APC, clear the user-cache.User
model is in your$uses
arrayapp/Model/User.php
and that the classname isUser
(singular, not plural)If, on the other hand, your model is properly loaded (the debugging example shows
User
, notAppModel
), then check if you actually have aregister()
method, if not, you should create if.Hope this helps.
[Update]
Just realised you're using the Users-plugin, and may be loading the wrong User-model. When using the plugin, you also need to use the
User
model from the plugin, not your ownUser
model.If you do have your own User-model, you should rename it to something other than
User
(e.g.AppUser
) to prevent CakePHP from loading the wrong Model. Follow the instructions in the plugin-documentation on how to extend the plugins 'components' here: extending the ModelHowever, if you want to extend the
User
model from the plugin, you'll also need to extend theUsersController
of the plugin, see Extending the ControllerIf you dont need to extend the plugin-Model and Controller, it's best to remove both from your application (e.g.
app/Model/User.php
andapp/Controller/UsersController.php
)I've kept my original suggestions above, because they still may be helpful in other situations
you should check the content in
$this->request->data
against the user table, maybe some value is not legal