2012-09-15 30 views
6

Tôi đang sử dụng MySQL 5.1 được lưu trữ tại ISP của tôi. Đây là câu hỏi của tôiLỗi cú pháp với IF EXISTS UPDATE ELSE INSERT

mysql_query(" 
IF EXISTS(SELECT * FROM licensing_active WHERE title_1='$title_1') THEN 
    BEGIN 
     UPDATE licensing_active SET time='$time' WHERE title_1='$title_1') 
    END ELSE BEGIN 
     INSERT INTO licensing_active(title_1) VALUES('$title_1') 
    END 
") or die(mysql_error()); 

Lỗi này là

... check the manual that corresponds to your MySQL server version for the right syntax to use near 'IF EXISTS(SELECT * FROM licensing_active WHERE title_1='Title1') THEN ' at line 1 

nhiệm vụ thực tế của tôi liên quan

WHERE title_1='$title_1' AND title_2='$title_2' AND version='$version' ...ETC... 

nhưng tôi đã giảm nó xuống để làm cho mọi việc đơn giản hơn cho vấn đề của tôi giải quyết

Trong các tìm kiếm của tôi về điều này, tôi tiếp tục nhìn thấy các tham chiếu đến 'ON CẬP NHẬT KEY DUPLICATE', nhưng không biết t o làm điều đó.

Trả lời

19

Đây là một giải pháp đơn giản và dễ dàng, hãy dùng thử.

$result = mysql_query("SELECT * FROM licensing_active WHERE title_1 ='$title_1' "); 

if(mysql_num_rows($result) > 0) { 
    mysql_query("UPDATE licensing_active SET time = '$time' WHERE title_1 = '$title_1' "); 
} 
else 
{ 
    mysql_query("INSERT INTO licensing_active (title_1) VALUES ('$title_1') "); 
} 
+2

Điều đó phù hợp với tôi, cảm ơn. Và có vẻ đơn giản để hiểu và ghi nhớ. Nó có thể không phải là siêu hiệu quả, nhưng đây không phải là một ứng dụng lưu lượng truy cập cao vì vậy tôi chắc chắn phương pháp này sẽ tốt cho một năm hoặc nhiều hơn. Cảm ơn bạn. – Openstar63

14

này nên làm các trick cho bạn:

insert into 
    licensing_active (title_1, time) 
    VALUES('$title_1', '$time') 
    on duplicate key 
     update set time='$time' 

này được giả định rằng title_1 là một cột duy nhất (thực thi bởi các cơ sở dữ liệu) trong bảng.

Cách hoạt động của insert... on duplicate là cố gắng chèn hàng mới trước, nhưng nếu chèn bị từ chối vì khóa dừng, nó sẽ cho phép bạn cập nhật một số trường nhất định.

+0

Xin chào Fluffeh. title_1 không phải là duy nhất. Cột duy nhất tôi có là một id được đặt tên int. Nó được đặt là 'auto_increment', 'unique' và 'primary'. Tôi không truy cập trực tiếp. Vẫn đang đấu tranh với cùng một lỗi. – Openstar63

+0

Không thể đạt được điều đó, vì vậy tôi đã làm logic trong PHP - như được mô tả bởi Dark Wish. Cảm ơn mặc dù. – Openstar63

+0

hoạt động cho tôi khi tôi xóa 'set' ở cuối. tức là 'INSERT INTO

(col1, col2) VALUES ('f1', 'f2') TRÊN CẬP NHẬT CHÍNH DU LỊCH col2 = 'fn'' –

Các vấn đề liên quan