0

MySQL クエリを使用してレコードを挿入するか、レコードが既に存在する場合は更新します。

'created'問題は、日時フィールドを更新したくないことです。

私のイベントデータ:

$event = [
    'userId'        => $this->userId,
    'googleEventId' => $googleEventId,
    'isAppointment' => $isAppointment,
    'eventTitle'       => $title,
    'eventLocation'    => $location,
    'eventDescription' => $description,
    'eventStart'    => $start,
    'eventEnd'      => $end,
    'created'       => date('Y-m-d H:i:s'), // This field should be ignored when updating
    'updated'       => date('Y-m-d H:i:s')
];

$updateこの関数を使用して、重複キー (パラメーター)を挿入または挿入更新しています。

public function insert($table, $data, $update = 0)
{
    ksort($data);

    $fieldNames  = implode(', ', array_keys($data));
    $fieldValues = ':' . implode(', :', array_keys($data));

    $updateOnDuplicate = '';

    if ($update)
    {
        $updateOnDuplicate = ' ON DUPLICATE KEY UPDATE ';

        foreach ($data as $key=> $value) {
            $updateOnDuplicate .= "$key=:$key,";
        }
        $updateOnDuplicate = rtrim($updateOnDuplicate, ',');
    }

    $stmt = $this->prepare("INSERT INTO $table ($fieldNames) VALUES ($fieldValues) $updateOnDuplicate");

    foreach ($data as $key => $value)
    {
        $stmt->bindValue(":$key", $value);
    }

    $stmt->execute();

    return $stmt->rowCount();
}

'created'どうにかしてこの関数内のフィールドを検出する必要があると思います。

4

1 に答える 1

3

Giveif($key!='created'){}ステートメントは解決策です。

public function insert($table, $data, $update = 0)
{
    ksort($data);

    $fieldNames  = implode(', ', array_keys($data));
    $fieldValues = ':' . implode(', :', array_keys($data));

    $updateOnDuplicate = '';

    if ($update)
    {
        $updateOnDuplicate = ' ON DUPLICATE KEY UPDATE ';

        foreach ($data as $key=> $value) {
            if($key!='created'){ // Here you can do what you want
            $updateOnDuplicate .= "$key=:$key,"; 
            } // Here you can do what you want
        }
        $updateOnDuplicate = rtrim($updateOnDuplicate, ',');
    }

    $stmt = $this->prepare("INSERT INTO $table ($fieldNames) VALUES ($fieldValues) $updateOnDuplicate");

    foreach ($data as $key => $value)
    {
        $stmt->bindValue(":$key", $value);
    }

    $stmt->execute();

    return $stmt->rowCount();
}

これで、この修正コードを実行できます。幸運を

于 2013-10-23T11:53:04.567 に答える