2014-02-10 41 views
0

我感到很遺憾是的,我知道這之前已經被要求,但是當我看到後,它看起來像我做的一切權利但它不能正常工作。SQL插入忽略不工作

所以,我只想在數據庫中不存在$ domain的情況下進行sql插入,我不介意多個域具有相同的IP。

這是我目前的sql查詢,它不會將任何域和IP添加到數據庫。

mysql_query("INSERT INTO domains (domain, ip) VALUES ('$domain', '$ip') WHERE NOT EXISTS (SELECT FROM domains where domain='$domain')"); 
+0

如果你不介意多個域具有相同的IP,那麼......有什麼問題?只需插入 – Eevee

+0

因爲我想在同一個IP上存儲多個域,但不是多個域。例如,一臺IP 1.1.1.1的共享主機服務器可能會運行3個域。但我不希望在DB – Orca

+0

OK同一域相同的IP,所以就'domain'唯一索引,和'INSERT INTO忽略域...'。也是通過你對sql注入的方式,這意味着一個無聊的書呆子可能會刪除你的整個數據庫; 'mysql_query'是超級已過時,你應該要麼使用PDO或與mysqli的綁定參數 – Eevee

回答

0

這是一個漫長的解決方案,但適合這種模式不具備的獨特屬性列。

INSERT INTO your_table (your_column) 
SELECT 'your_value' FROM (SELECT 1) t 
WHERE NOT EXISTS 
    (
     SELECT your_same_column 
     FROM you_same_table 
     WHERE your_same_column = 'your_same_value' 
    ); 

得到了解決here

但是,如果你有問題列具有獨特的屬性,那麼你可能只是這樣做短方法。

INSERT IGNORE INTO your_table(your_column) VALUES('your_value'); 
+1

如果你需要一個'FROM'子句,'FROM DUAL'也應該工作得很好。還有,如果你沒有索引,'NOT EXISTS'將會進行全表掃描,如果你有一個索引,你不需要這樣做:) – Eevee

+0

Eevee我不知道如何設置索引我研究了你所說的鏈接,並嘗試了下面的命令,如果它工作的更好,但它會增加重複項。 mysql_query(「REPLACE INTO domains(domain,ip)VALUES('$ domain','$ ip')」); 。 TY Craftein,目前正在嘗試這 – Orca

+0

我給你查詢創建一個獨特的索引作爲您的問題的評論;只需將其粘貼到一個mysql客戶端。 – Eevee

0

您還需要申請SELECT

INSERT INTO domains (domain, ip) 
SELECT * FROM 
(SELECT ('$domain', '$ip')) AS tmp 
WHERE NOT EXISTS (
    SELECT * FROM domains where domain='$domain' 
); 
+0

您好先生,非常感謝您的回覆只是去嘗試,而不是加工。 – Orca

+0

檢查@Orca – zzlalani

+0

好了剛試過的mysql_query更新(「INSERT INTO域(域,IP) VALUES( '$域', '$ IP') SELECT域名,IP FROM域 WHERE NOT EXISTS(SELECT null FROM域domain ='$ domain' )「); 而不是工作 – Orca