Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Vorbereitete Anweisung mit ON DUPLICATE KEY

Der einfachste Weg, INSERT...ON DUPLICATE KEY UPDATE zu verwenden, besteht darin, die VALUES-Klausel auf folgende Weise zu verwenden, sodass Sie die Parameter in der UPDATE-Klausel nicht wiederholen müssen. Sie verwenden einfach dieselben Werte für jede Spalte, die Sie in der VALUES-Klausel übergeben haben:

if($stmt = $mysqli -> prepare("
    INSERT INTO user_info (city, state, website, public_contact, 
        user, zipcode, pic, emailme)
    VALUES (?, ?, ?, ?, ?, ?, ?, ?) 
    ON DUPLICATE KEY UPDATE
        city = VALUES(city),
        state = VALUES(state),
        website = VALUES(website),
        public_contact = VALUES(public_contact),
        user = VALUES(user),
        zipcode = VALUES(zipcode),
        pic = VALUES(pic),
        emailme = VALUES(emailme)") {
    $stmt -> bind_param("sssssssi",$city, $state, $website, $public_contact, 
        $user, $zipcode, $pic, $emailme);
    $stmt -> execute();
    $stmt -> close();
}

Die IODKU-Syntax erfordert, dass Sie jede Spalte einzeln festlegen. Sie können sie nicht alle in einer Klausel auflisten, wie Sie es versucht haben.

Sie sollten immer alle Fehler von Aufrufen an „prepare()“ oder „execute()“ melden. Oder Sie können mysqli Ausnahmen auslösen:

$mysqli -> report_mode = MYSQLI_REPORT_STRICT;

Außerdem brauchen Sie bind_result() nicht, da es keine Ergebnismenge von INSERT:

gibt
// NO: $stmt -> bind_result($result);