sql >> Databasteknik >  >> RDS >> Mysql

Uppdatera rader efter mysql select foreach

Första frågan, du utnyttjade inte alls förberedda uttalanden. Använd parametrar (koden ? i frågan) och fyll dem sedan med värden i execute() ring.

Förbered också din fråga utanför en loop och kör den inuti. Detta är en av de viktigaste fördelarna med att förbereda uttalanden i förväg, det blir mindre omkostnader när de bara förbereds en gång.

Slutligen, det finns inget behov av att kontrollera databasen innan din fråga och sedan köra en av två frågor. Låt bara MySQL kontrollera om värdet redan finns med INSERT...ON DUPLICATE KEY UPDATE syntax. Detta är beroende av att databasen är korrekt inställd, så det bör finnas en UNIQUE index på (session.usr_id, session.site_id) .

Det här är oprövat, men borde få dig igång:

$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. Skapa en CTE i Oracle

  2. ER_ACCESS_DENIED_ERROR CloudSQL

  3. Hur man använder cURL för att hämta specifik data från en webbplats och sedan spara den i min databas med php

  4. Django och skrivskyddade databasanslutningar