Cakephp 错误:SQLSTATE[42000]:语法错误或访问冲突:1064您的SQL语法有错误;检查手册

Cakephp 错误:SQLSTATE[42000]:语法错误或访问冲突:1064您的SQL语法有错误;检查手册,cakephp,cakephp-2.0,cakephp-1.3,cakephp-2.1,cakephp-2.3,Cakephp,Cakephp 2.0,Cakephp 1.3,Cakephp 2.1,Cakephp 2.3,错误:SQLSTATE[42000]:语法错误或访问冲突:1064您 SQL语法有错误;检查相应的手册 您的MySQL服务器版本,以便在“@g.com”附近使用正确的语法, “用户”。“电话”=87665r5,“用户”。“地址”=23lsdhf, “用户”。“位置”位于第1行 SQL查询: UPDATE'cake.'users'为'User'设置'User.'username'=paul,'User.'password'=eben,'User.'email'=paul@g.com,“用户”。“电

错误:SQLSTATE[42000]:语法错误或访问冲突:1064您 SQL语法有错误;检查相应的手册 您的MySQL服务器版本,以便在“@g.com”附近使用正确的语法, “用户”。“电话”=87665r5,“用户”。“地址”=23lsdhf, “用户”。“位置”位于第1行

SQL查询:
UPDATE'cake.'users'为'User'设置'User.'username'=paul,'User.'password'=eben,'User.'email'=paul@g.com,“用户”。“电话”=87665r5,“用户”。“地址”=23lsdhf,“用户”。“位置”=lskjaflasi,“用户”。“pincode”=867567,其中“用户”。“id”=1

我的代码是

       if($this->request->data)
        {$User=$this->request->data[User];
    $this->User->updateAll($User,array("User.id" => $v));}
如何更新整个表单?

updateAll()
与使用
save()
时不同,它不会自动将字符串值括在引号中。你必须自己做这件事。发件人:-

应使用DboSource::value()手动引用文字值

在调用
updateAll()
之前,需要使用数据源的
value()
方法将每个字符串值用引号括在
$this->request->data
中:-

建议不要将
$this->request->data
传递给
updateAll()
,因为有人可能会将数据注入数据库。而是根据请求数据构建一个新的save数据数组,并根据需要包装字符串。例如:-

$user=$this->request->data[User]
$data = array(
    'username' => $db->value($user['username'], 'string'),
    'password' => $db->value($user['password'], 'string'),
    'email' => $db->value($user['email'], 'string'),
    'phone' => $db->value($user['phone'], 'string'),
    'address' => $db->value($user['address'], 'string'),
    'location' => $db->value($user['location'], 'string'),
    'pincode' => $db->value($user['pincode'], 'integer')
);
$this->User->updateAll($data, array("User.id" => $v));
更新

作为使用
updateAll()
的替代方法,您最好使用
save()。只要保存的数据包含记录的主键(例如,
User.id
),它将执行
更新
,而不是
插入
:-

$this->request->data['User']['id'] = $v;
$this->User->save($this->request->data);

save()
将为您处理所有字符串,因此无需自己将它们括在引号中。

您没有将字符串值括在单引号中。@HoboSapiens有没有简单的方法将它们括在单引号中谢谢Hanks@drmonkeynija您还有什么其他的可能性可以建议我吗?谢谢@Paul我已经更新了答案,以显示使用
save()
的更好方法,因为
updateAll()
在您的特定示例中有点多余。如果您确实需要使用
updateAll()
,并且需要轻松地将所有字符串值用引号括起来,则可以使用PHP函数
array\u map
将每个值快速用引号括起来。谢谢@drmonkeynija
$this->request->data['User']['id'] = $v;
$this->User->save($this->request->data);