我正在尝试执行updateAll,如下所示:
// initialize the array
$array = array(
"Land Rover" => array("LAND ROVER")
);
// loop both arrays
foreach($array as $new => $aOld) {
foreach($aOld as $old) {
$this->updateAll(array('make = $new'), array('make = $old'));
}
}
但是我收到了错误:
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 'Rover WHERE `make` = 'LAND ROVER'' at line 1
我所追求的是:
UPDATE items SET make = 'Land Rover' WHERE make = 'LAND ROVER';
请不要给我关于案例转换的答案,因为我有其他数组元素不止于此。
如何避免错误?实际上,我如何转储完整的SQL?我在Console
。
非常感谢。
编辑:我刚刚接受了SQL的调试:
UPDATE `items` AS `Item` SET `Item`.`id` = make = "Land Rover" WHERE `make` = '\"LAND ROVER\"'
一个明显的问题,但它是如何实现的?
答案 0 :(得分:2)
值和条件应作为关联数组传递;
$this->updateAll(
array(
'Item.make' => Sanitize::escape($new)
),
array(
'Item.make' => $old
)
);
请注意;
我不在我的电脑后面,不确定Sanitize::escape()
是否引用值,否则;
array(
'Item.make' => "'" . Sanitize::escape($new) . "'"
),
答案 1 :(得分:0)
您需要自己引用$fields
param中的值,就像API所说:
$this->updateAll(array("make = \"$new\""), array('make = $old'));
更易读的版本是:
$this->updateAll(array('make' => "\"$new\""), array('make' => $old));
答案 2 :(得分:0)
$this->modelname->updateAll(array('make'=>"'$new'"), array('modelname.make'=>$old))
i hope its working