2012-08-14 61 views
1

我想在CakePHP中执行SQL更新。这里是我的代码:cakephp SQL帮助!哪里?

$sql = " 
    UPDATE carts 
    SET 
    qty = ".$this->data['Cart']['qty'].", 
    process = 'UnPaid' 
    WHERE ct_session_id = '".$this->data['Cart']['ct_session_id']."' 
    AND product_id = '".$this->passedArgs['pd_id']."' 
    AND key = '".$this->Session->read('Cart.key', $newCartkey)."' 
";  
$this->Cart->query($sql); 

我得到这个错误:

SQL Error: 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 'key = 'bwfgkxms'' at line 3 

我的代码生成的查询是:

UPDATE carts 
SET 
    qty = 111, 
    process = 'UnPaid' 
WHERE ct_session_id = '3254430f577669bb8ecdb8b8aadf1b96' 
    AND product_id = '51' 
    AND key = 'bwfgkxms' 
+1

使用CakePHP,但忽略所有约定=可能不是一个好主意。 (使用CakePHP的save()功能 - 它可以帮你避免像这样的麻烦) – Dave 2012-08-14 14:45:50

回答

8

key是MySQL中的reserved word,你需要将其包围在列名中带有反引号。

$sql = " 
UPDATE carts 
SET qty = ".$this->data['Cart']['qty'].", process = 'UnPaid' 
WHERE ct_session_id = '".$this->data['Cart']['ct_session_id']."' 
    AND product_id = '".$this->passedArgs['pd_id']."' 
    AND `key` = '".$this->Session->read('Cart.key', $newCartkey)."' 
"; 
+1

@DaveRandom你击败了我! :P谢谢你。 – nickb 2012-08-14 13:15:11

+4

这是一个协作的努力: - D - 可能值得一提的是Bobby Tables,看起来很像可疑的用户对我的输入... – DaveRandom 2012-08-14 13:16:25

0

如果养成使用CakePHP约定的习惯会大大有利于您。这样做有许多好处,当您执行诸如手写轻松使用CakePHP完成的查询之类的操作时,您可能会让自己更加困难,并为自己解决许多问题/安全问题未来。

CakePHP的方式(与所有的利益包含在以下约定):

$this->Cart->updateAll(
    array(
     'Cart.qty' => $this->data['Cart']['qty'], 
     'Cart.process' => 'UnPaid'), 
    array(
     'Cart.ct_session_id' => $this->data['Cart']['ct_session_id'], 
     'Cart.product_id' => $this->passedArgs['pd_id'], 
     'Cart.key' => $this->Session->read('Cart.key', $newCartkey) 
    ) 
); 

更多细节上的更新数据(和/或保存在通用数据): http://book.cakephp.org/2.0/en/models/saving-your-data.html#model-updateall-array-fields-array-conditions