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