2012-05-02 35 views
0

存在價值我有一個MySQL表這樣的結構是這樣的:添加日期到MySQL值插入如果

|  uri  | title  | 
_________________ _____________ 
Latest-Update  Latest Update 
        Latest Update 

其中URI列的索引。我有進行一次mysql表的occassional注入,並且如果我有一個或多個具有相同名稱的URI,就會出現ERROR Duplicate Entry。所以我使用PHP進行插入,並且在插入時想要在變量$ uri的末尾追加date("m-d-y")。我的INSERT語句INSERT INTO table( uri ,標題) values('$uri', '$title')。我希望看看在INSERT發生之前,在插入的表中,如果我能分辨$uri值是否已經存在於uri表中,並且如果是這樣,那個變量將變成$uri = $uri."-"date("m-d-y");我該如何判斷?我已經做了一些研究,並讓我相信我應該使用INSERT...ON DUPLICATE KEY UPDATE

+0

使用重複鍵更新將強制它更新現有的條目,而不是插入一個新的 – Anigel

+0

刪除sql-injection標籤作爲誤解 –

回答

0

大概這可能是由於你的uri是主鍵。爲此,您應該創建一個代理鍵並允許重複。如果那確實是你需要的。

0

不確定您是否有興趣觸發器,但您可以依靠BEFORE INSERT觸發器。觸發器需要檢查被插入的新的uri是否有一個複製條目,如果是,則附加dateStringOfYourFormat並插入。

mysql> drop table mytable; 
Query OK, 0 rows affected (0.03 sec) 

mysql> create table mytable(uri varchar(128)); 
Query OK, 0 rows affected (0.05 sec) 

mysql> drop trigger uri_modifier; 
ERROR 1360 (HY000): Trigger does not exist 
mysql> delimiter // 
mysql> create trigger uri_modifier before insert on mytable 
    -> for each row 
    -> begin 
    -> if (select count(uri) from mytable where uri=NEW.uri) > 0 then 
    -> set @modified_uri_string=concat(NEW.uri, '-', date_add(sysdate(), interval floor(rand()*1e6) microsecond)); 
    -> set [email protected]_uri_string; 
    -> end if; 
    -> end// 
Query OK, 0 rows affected (0.00 sec) 

mysql> 
mysql> delimiter ; 
mysql> 
mysql> set @my_new_uri_string = 'my_uri_string_to_search'; 
Query OK, 0 rows affected (0.00 sec) 

mysql> set @modified_uri_string = @my_new_uri_string; 
Query OK, 0 rows affected (0.00 sec) 

mysql> select * from mytable; 
Empty set (0.00 sec) 

mysql> insert into mytable values(@my_new_uri_string); 
Query OK, 1 row affected (0.03 sec) 

mysql> select @my_new_uri_string, @modified_uri_string; 
+-------------------------+-------------------------+ 
| @my_new_uri_string  | @modified_uri_string | 
+-------------------------+-------------------------+ 
| my_uri_string_to_search | my_uri_string_to_search | 
+-------------------------+-------------------------+ 
1 row in set (0.00 sec) 

mysql> select * from mytable; 
+-------------------------+ 
| uri      | 
+-------------------------+ 
| my_uri_string_to_search | 
+-------------------------+ 
1 row in set (0.00 sec) 

mysql> insert into mytable values(@my_new_uri_string); 
Query OK, 1 row affected (0.03 sec) 

mysql> select @my_new_uri_string, @modified_uri_string; 
+-------------------------+----------------------------------------------------+ 
| @my_new_uri_string  | @modified_uri_string        | 
+-------------------------+----------------------------------------------------+ 
| my_uri_string_to_search | my_uri_string_to_search-2012-05-03 02:21:39.983405 | 
+-------------------------+----------------------------------------------------+ 
1 row in set (0.00 sec) 

mysql> select * from mytable; 
+----------------------------------------------------+ 
| uri            | 
+----------------------------------------------------+ 
| my_uri_string_to_search       | 
| my_uri_string_to_search-2012-05-03 02:21:39.983405 | 
+----------------------------------------------------+ 
2 rows in set (0.02 sec) 

mysql> insert into mytable values(@my_new_uri_string); 
Query OK, 1 row affected (0.01 sec) 

mysql> select @my_new_uri_string, @modified_uri_string; 
+-------------------------+----------------------------------------------------+ 
| @my_new_uri_string  | @modified_uri_string        | 
+-------------------------+----------------------------------------------------+ 
| my_uri_string_to_search | my_uri_string_to_search-2012-05-03 02:21:39.412580 | 
+-------------------------+----------------------------------------------------+ 
1 row in set (0.00 sec) 

mysql> select * from mytable; 
+----------------------------------------------------+ 
| uri            | 
+----------------------------------------------------+ 
| my_uri_string_to_search       | 
| my_uri_string_to_search-2012-05-03 02:21:39.983405 | 
| my_uri_string_to_search-2012-05-03 02:21:39.412580 | 
+----------------------------------------------------+ 
3 rows in set (0.00 sec) 

mysql> 
mysql> 

確保如果uri插入不同的是比傳入,你有一個手柄知道修改後的值是什麼。