sql >> Database teknologi >  >> RDS >> Mysql

Opdater rækker efter mysql select foreach

Første spørgsmål, du udnyttede slet ikke forberedte udtalelser. Brug parametre (? i forespørgslen) og udfyld dem derefter med værdier i execute() ring.

Forbered også din forespørgsel uden for en løkke, og kør den inde. Dette er en af ​​de vigtigste fordele ved at forberede erklæringer på forhånd, der er mindre overhead, når de kun er udarbejdet én gang.

Endelig er der ikke behov for at tjekke databasen før din forespørgsel og derefter udføre en af ​​to forespørgsler. Bare lad MySQL kontrollere, om værdien allerede eksisterer med INSERT...ON DUPLICATE KEY UPDATE syntaks. Dette afhænger af, at databasen er konfigureret korrekt, så der burde være en UNIQUE indeks på (session.usr_id, session.site_id) .

Dette er utestet, men burde få dig i gang:

$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. Zend db adapter mysqli eller PDO_MYSQL

  2. Ikke flere data at læse fra socket-fejl

  3. Vælg kun overordnet række, hvis den ikke har nogen underordnede

  4. MariaDB ROWNUM() Forklaret