sql >> Base de Datos >  >> RDS >> Mysql

Actualizar filas después de mysql select foreach

Primer problema, no estabas aprovechando las declaraciones preparadas en absoluto. Usar parámetros (el ? en la consulta) y luego rellénelos con valores en execute() llamar.

Además, prepare su consulta fuera de un bucle y ejecútela dentro. Esta es una de las principales ventajas de preparar declaraciones por adelantado, hay menos gastos generales cuando solo se preparan una vez.

Finalmente, no hay necesidad de verificar la base de datos antes de su consulta y luego ejecutar una de dos consultas. Simplemente deje que MySQL verifique si el valor ya existe con INSERT...ON DUPLICATE KEY UPDATE sintaxis. Esto depende de que la base de datos esté configurada correctamente, por lo que debe haber un UNIQUE índice en (session.usr_id, session.site_id) .

Esto no se ha probado, pero debería ponerte en marcha:

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