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