2012-10-11 50 views
0

我有語法錯誤,我的代碼INSERT ... WHERE NOT EXISTS錯誤

$insert = @mysql_query("INSERT INTO topics (t_title, t_desc, t_pic, t_link, t_date,cat_id) 
SELECT '$t_title','$t_desc','$t_pic','$t_link','$t_date','$cat_id' 
WHERE NOT EXISTS (SELECT t_link 
FROM topics 
WHERE t_link = $t_link 
) 
")or die(mysql_error()); 

這將返回一個錯誤:

You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'WHERE NOT EXISTS (SELECT t_link FROM topics WHERE t_link = 'showthread.php?t=120' at line 3 

我認爲這個問題是t_link = $ t_link

但是,當我用正常值替換它時,問題仍然存在。

任何幫助?

+0

應該'WHERE t_link = $ t_link'不'WHERE t_link =「$ t_link''? – dunc

+0

@dunc我試過但沒有工作。 –

+0

請更改:die(mysql_error());通過die(echo($ insert));併發布乾淨的SQL查詢。 – danihp

回答

3

你錯過了第一FROM選擇了FROM子句,請檢查作爲解決chumkiu的回答,不是我

SELECT '$t_title','$t_desc','$t_pic','$t_link','$t_date','$cat_id' 
# MISSED HERE FROM ??? 
WHERE NOT EXISTS 
+0

這是php變量。我怎麼寫FROM? –

+0

嘗試與'從雙''但不知道這是你的錯誤。 – danihp

+0

嘗試'FROM topics' –

1

這裏的解決方案。

create table a (i int); 

insert into a (i) 
select 1 
from dual 
where 1=2; 

insert into a (i) 
select 3 
from dual 
where 1=1; 

Results

+0

+1雙重絕招:-) –

0

如果t_link是在表中唯一索引,你可以這樣做:

$insert = @mysql_query("INSERT IGNORE INTO topics (t_title, t_desc, t_pic, t_link, t_date,cat_id) 
    VALUES ('$t_title','$t_desc','$t_pic','$t_link','$t_date','$cat_id'); 

IGNORE關鍵字告訴它什麼也不做,如果插入會複製一個唯一的密鑰約束。

+0

這是真的!不幸的是它不是唯一的關鍵 –