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

Tuyên bố chuẩn bị với ON DUPLICATE KEY

Cách dễ nhất để sử dụng INSERT ... ON DUPLICATE KEY UPDATE là sử dụng mệnh đề VALUES theo cách sau, vì vậy bạn không cần lặp lại các tham số trong mệnh đề CẬP NHẬT. Họ chỉ sử dụng các giá trị giống nhau cho mỗi cột mà bạn đã chuyển trong mệnh đề VALUES:

if($stmt = $mysqli -> prepare("
    INSERT INTO user_info (city, state, website, public_contact, 
        user, zipcode, pic, emailme)
    VALUES (?, ?, ?, ?, ?, ?, ?, ?) 
    ON DUPLICATE KEY UPDATE
        city = VALUES(city),
        state = VALUES(state),
        website = VALUES(website),
        public_contact = VALUES(public_contact),
        user = VALUES(user),
        zipcode = VALUES(zipcode),
        pic = VALUES(pic),
        emailme = VALUES(emailme)") {
    $stmt -> bind_param("sssssssi",$city, $state, $website, $public_contact, 
        $user, $zipcode, $pic, $emailme);
    $stmt -> execute();
    $stmt -> close();
}

Cú pháp IODKU yêu cầu bạn đặt từng cột riêng lẻ. Bạn không thể liệt kê tất cả chúng trong một mệnh đề như bạn đang cố gắng làm.

Bạn phải luôn báo cáo bất kỳ lỗi nào từ bất kỳ lệnh gọi nào để chuẩn bị () hoặc thực thi (). Hoặc bạn có thể đặt ngoại lệ ném mysqli:

$mysqli -> report_mode = MYSQLI_REPORT_STRICT;

Ngoài ra, bạn không cần bind_result (), vì không có kết quả nào được đặt từ INSERT:

// NO: $stmt -> bind_result($result);


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Hiển thị tất cả các hàng trong bảng mysql sau đó cung cấp tùy chọn để xóa những hàng cụ thể

  2. Chế độ xem MySQL

  3. trường varchar đặt hàng mysql dưới dạng số nguyên

  4. Tạo nếu một mục không tồn tại, nếu không, hãy cập nhật?

  5. Mysql - Đổi tên tất cả các bảng và cột thành chữ thường?