cakePHP:使用多个条件的WHERE子句更新mysql表

时间:2013-06-11 21:44:01

标签: mysql cakephp cakephp-2.0

我想用cakePHP语法编写这个SQL语句:

UPDATE students SET status = 'graduated' WHERE age = '23' AND major = 'math';

现在,我尝试在蛋糕中做这个的方式是

$student->updateAll(  array('Student.status' => "'".$rowdata."'"), 
          array('Student.age' => $current_highest_age,'Student.major' =>
                    "'".$major."'"));

我的变量:$ rowdata ='毕业'; $ current_highest_age = 23;和$ major ='math'。

该表未更新。我的语法有问题吗?我将非常感谢你的帮助。

问题更新:

实际上,我发现我的语法错误。蛋糕代码应为'Student.major' => $major而不是'Student.major'=>"'".$major."'"

3 个答案:

答案 0 :(得分:3)

你是双重逃避

updateAll期望字段是SQL表达式(或简称为引用字符串),但条件不应该是。因此,您现在要生成的查询是:

UPDATE 
    students
SET
    status = 'graduated' 
WHERE 
    age = '23' AND 
    major = '\'math\''

为了防止多余的引号,这将导致语法上有效的语句匹配0行,只需让Cake像其他方法一样照顾你的条件:

$student->updateAll(
    array('Student.status' => "'".$rowdata."'"), 
    array(
        'Student.age' => $current_highest_age,
        'Student.major' => $major
    )
);

答案 1 :(得分:0)

更新模型字段的简便方法

$this->Testing->updateAll(
    array('Testing.door_open_close' => $door_open_close),   // value that is updated                  
    array('Testing.id' => $zoneId)     // condition field of a Model
);

答案 2 :(得分:-2)

UPDATE students ...
       ^^^^^^^^--- student WITH an S

v.s。

array('Student.age')
       ^^^^^^^  - student WITHOUT an S