Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

Atualizar linhas após mysql selecionar foreach


Primeira questão, você não estava tirando vantagem das declarações preparadas. Use parâmetros (o ? na consulta) e, em seguida, preencha-os com valores no execute() ligar.

Além disso, prepare sua consulta fora de um loop e execute-a dentro. Essa é uma das principais vantagens de preparar declarações com antecedência, pois há menos sobrecarga quando elas são preparadas apenas uma vez.

Por fim, não há necessidade de verificar o banco de dados antes de sua consulta e, em seguida, executar uma das duas consultas. Apenas deixe o MySQL verificar se o valor já existe com INSERT...ON DUPLICATE KEY UPDATE sintaxe. Isso depende do banco de dados ser configurado corretamente, então deve haver um UNIQUE indexar em (session.usr_id, session.site_id) .

Isso não foi testado, mas deve ajudá-lo:
$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));
}