sql >> Database >  >> RDS >> Mysql

Rijen bijwerken nadat mysql foreach selecteert

Eerste probleem, je profiteerde helemaal niet van voorbereide verklaringen. Gebruik parameters (de ? in de query) en vul ze vervolgens met waarden in de execute() bellen.

Bereid uw query ook buiten een lus voor en voer deze binnen uit. Dit is een van de belangrijkste voordelen van het vooraf voorbereiden van verklaringen:er is minder overhead wanneer ze maar één keer worden voorbereid.

Ten slotte is het niet nodig om de database vóór uw zoekopdracht te controleren en vervolgens een van de twee zoekopdrachten uit te voeren. Laat MySQL controleren of de waarde al bestaat met INSERT...ON DUPLICATE KEY UPDATE syntaxis. Dit is afhankelijk van de juiste instelling van de database, dus er moet een UNIQUE . zijn index op (session.usr_id, session.site_id) .

Dit is niet getest, maar zou je op weg moeten helpen:

$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. Hoe maak je geselecteerde dynamische velden uit een tabel in mysql?

  2. Mysql-bestanden verplaatsen tussen servers

  3. Hoe wijzig ik het datumformaat in Postgres?

  4. Hoe stopwoorden in MYSQL te resetten?