1

値が以前に挿入されていない場合、テーブルの値を更新したいと考えています。これが私のコードです-

function save_data($date, $game, $score) {
    $criteria = new CDbCriteria;
    $criteria->addCondition("date = '{$date}'");
    $data = array("date" => $date,
        "game" => $game,
        "score" => $score);
    $game_report = new GameReport();
    $game_report->attributes = $data;
    $game_report->save();
}

しかし、日付条件を指定したにもかかわらず、重複する値を挿入し続けます。なんで?重複する値を更新して挿入しないようにするにはどうすればよいですか?

4

2 に答える 2

4

更新を行うには、すでにロードされているデータベース モデルで行う必要があります。あなたの場合、これは次のように行うことができます:

function save_data($date, $game, $score) {
    $criteria = new CDbCriteria;
    $criteria->addCondition("date = '{$date}'");

    $data = array(
        "date" => $date,
        "game" => $game,
        "score" => $score
    );

    $game_report = GameReport::model()->findByAttributes($data);
    if (empty($game_report)) {
        $game_report = new GameReport();
    }
    $game_report->attributes = $data;
    $game_report->save();
}

また、SQL インジェクションを避けるために、次のような条件パラメーターをバインドする必要があります。

$criteria->addCondition("date = :d");
$criteria->params[':d'] = $date;

または単に:

$criteria->compare('date', $date);
于 2013-07-10T22:20:23.807 に答える