1

次のように 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\"'

明らかな問題ですが、どうやってそこにたどり着いたのですか?

4

3 に答える 3

2

値と条件は連想配列として渡す必要があります。

$this->updateAll(
    array(
        'Item.make' => Sanitize::escape($new)
    ),
    array(
        'Item.make' => $old
    )
);

ノート; 私は自分のコンピューターの後ろにいないので、Sanitize::escape()すでに値を引用しているかどうかわかりません。

array(
    'Item.make' => "'" . Sanitize::escape($new) . "'"
),
于 2013-05-11T12:31:03.697 に答える
0
$this->modelname->updateAll(array('make'=>"'$new'"), array('modelname.make'=>$old))

i hope its working
于 2013-05-13T06:29:32.613 に答える
0

APIが言う$fieldsように、paramの値を自分で引用する必要があります。

$this->updateAll(array("make = \"$new\""), array('make = $old'));

より読みやすいバージョンは次のようになります。

$this->updateAll(array('make' => "\"$new\""), array('make' => $old));
于 2013-05-11T11:53:05.003 に答える