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

Truy vấn mysqli php phức tạp để chèn dữ liệu nếu không tồn tại:nhận được tên cột trùng lặp '?'

Hãy thử điều này:

$SQL = "INSERT INTO wifi (ssid, password, name, surname) 
        SELECT ?, ?, ?, ? FROM DUAL 
        WHERE NOT EXISTS (
            SELECT *
            FROM wifi 
            WHERE ssid=? AND name=? AND surname=?)";

DUAL là một tên bảng giả mà bạn có thể sử dụng khi không cần truy cập vào một bảng thực tế. Đưa trình giữ chỗ vào SELECT chính thay vì truy vấn con dường như tránh được vấn đề về trình giữ chỗ.

Cách khác mà bạn có thể làm là tạo một chỉ mục duy nhất trên các cột đó:

CREATE UNIQUE INDEX ssid_name_surname ON wifi (ssid, name, surname);

Sau đó, bạn có thể sử dụng:

$SQL = "INSERT IGNORE INTO wifi (ssid, password, name, surname)
        VALUES (?, ?, ?, ?)";

Nếu bạn muốn cập nhật mật khẩu nếu nó đã tồn tại, hãy sử dụng ON DUPLICATE KEY UPDATE thay vì INSERT IGNORE :

$SQL = "INSERT INTO wifi (ssid, password, name, surname)
        VALUES (?, ?, ?, ?)
        ON DUPLICATE KEY UPDATE password = VALUES(password)";


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Không thể tạo PoolableConnectionFactory (Quyền truy cập bị từ chối đối với người dùng '' @ 'localhost'

  2. Tìm kiếm bảng mysqli với biểu mẫu và kết quả hiển thị

  3. Cảnh báo:mysqli_num_rows () mong đợi chính xác 1 tham số, 2 cho trước | mysql | mysqli

  4. Tại sao kết quả của `select 'a' =0;` 1?

  5. Mysql Real Escape String Hàm PHP Thêm \ vào Mục nhập Trường của Tôi