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

Aggiorna le righe dopo che mysql seleziona foreach

Primo problema, non stavi affatto approfittando delle dichiarazioni preparate. Utilizzare parametri (il ? nella query) e poi riempili con i valori in execute() chiama.

Inoltre, prepara la tua query all'esterno di un ciclo ed eseguila all'interno. Questo è uno dei principali vantaggi della preparazione anticipata dei rendiconti, ci sono meno spese generali quando vengono preparati una sola volta.

Infine, non è necessario controllare il database prima della query e quindi eseguire una delle due query. Lascia che MySQL controlli se il valore esiste già con INSERT...ON DUPLICATE KEY UPDATE sintassi. Ciò si basa sulla corretta configurazione del database, quindi dovrebbe esserci un UNIQUE indice su (session.usr_id, session.site_id) .

Questo non è testato, ma dovrebbe farti andare avanti:

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