sql >> Databáze >  >> RDS >> Mysql

Aktualizujte řádky po výběru mysql foreach

Zaprvé, vůbec jste nevyužívali připravená prohlášení. Použijte parametry (? v dotazu) a poté je vyplňte hodnotami v execute() zavolejte.

Také připravte svůj dotaz mimo smyčku a spusťte jej uvnitř. To je jedna z klíčových výhod přípravy výkazů předem, je zde menší režie, když jsou sestavovány pouze jednou.

Konečně není třeba před dotazem kontrolovat databázi a poté provádět jeden ze dvou dotazů. Nechte MySQL zkontrolovat, zda hodnota již existuje pomocí INSERT...ON DUPLICATE KEY UPDATE syntax. To závisí na správném nastavení databáze, takže by měl existovat UNIQUE index na (session.usr_id, session.site_id) .

Toto není testováno, ale mělo by vám pomoci:

$stmt1 = $handler->prepare("SELECT id,comments,likes,views FROM sites WHERE usr_id = ?");
$stmt2 = $handler->prepare("INSERT INTO session SET comments = ?, likes = ?, views = ?, usr_id = ?, site_id = ? ON DUPLICATE KEY UPDATE comments = VALUES(comments), likes = VALUES(likes), views = VALUES(views)");

$stmt1->execute(array($usr_id));
while($row = $stmt1->fetch(PDO::FETCH_ASSOC)) {
    $site_id = $row["id"];
    $stmt2->execute(array($comments, $likes, $views, $usr_id, $site_id));
}


  1. ClassCastException:java.math.BigInteger nelze přetypovat na java.lang.Long při připojení k MySQL

  2. Připojení podle předchozího ekvivalentu pro MySQL

  3. Funkce oken a další místní agregace

  4. Sloučení 3 tabulek/dotazů pomocí MS Access Union Query