Mysql
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Mysql

Cập nhật các hàng sau khi mysql chọn foreach

Vấn đề đầu tiên, bạn đã hoàn toàn không tận dụng được các báo cáo đã chuẩn bị. Sử dụng các tham số (? trong truy vấn) và sau đó điền chúng bằng các giá trị trong execute() gọi.

Ngoài ra, hãy chuẩn bị truy vấn của bạn bên ngoài một vòng lặp và thực thi nó bên trong. Đây là một trong những lợi thế quan trọng của việc chuẩn bị trước các báo cáo, sẽ ít tốn chi phí hơn khi chúng chỉ được lập một lần.

Cuối cùng, không cần kiểm tra cơ sở dữ liệu trước truy vấn của bạn và sau đó thực hiện một trong hai truy vấn. Chỉ cần để MySQL kiểm tra xem giá trị đã tồn tại hay chưa bằng INSERT...ON DUPLICATE KEY UPDATE cú pháp. Điều này phụ thuộc vào cơ sở dữ liệu được thiết lập đúng cách, vì vậy phải có UNIQUE lập chỉ mục trên (session.usr_id, session.site_id) .

Điều này chưa được kiểm tra, nhưng bạn sẽ thực hiện được:

$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. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. thiết lập phiên bản cơ sở dữ liệu đích để di chuyển bàn làm việc mysql

  2. kiểm tra xem email có tồn tại trong cơ sở dữ liệu MySQL không

  3. Chỉ trả lại hàng nếu giá trị không tồn tại

  4. PHP SQL STMT CHỌN nhiều LIKE? là nó có thể?

  5. Làm thế nào để xử lý quá nhiều kết nối đồng thời ngay cả sau khi sử dụng một nhóm kết nối?