sql >> Base de Datos >  >> RDS >> Mysql

Declaración preparada con CLAVE DUPLICADA

La forma más fácil de usar INSERT...ON DUPLICATE KEY UPDATE es usar la cláusula VALUES de la siguiente manera, por lo que no necesita repetir los parámetros en la cláusula UPDATE. Simplemente usan los mismos valores para cada columna que pasó en la cláusula VALUES:

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();
}

La sintaxis de IODKU requiere que configure cada columna individualmente. No puede enumerarlos a todos en una cláusula como estaba tratando de hacer.

Siempre debe informar cualquier error de cualquier llamada para preparar () o ejecutar (). O puede hacer que mysqli arroje excepciones:

$mysqli -> report_mode = MYSQLI_REPORT_STRICT;

Además, no necesita bind_result(), ya que no hay un conjunto de resultados de INSERT:

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