0

次のような構造のMySQLテーブルがあります。

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

ここで、uri 列は INDEX です。mysql テーブルに対して時折インジェクションを実行していますが、同じ名前の URI が 1 つ以上ある場合、ERROR Duplicate Entry が表示されます。だから私は、PHP を inijction に使用し、date("m-d-y")挿入時に変数 $uri の末尾に a を追加したいと考えています。私の INSERT ステートメントINSERT INTO table(uri ,title ) values('$uri', '$title')。INSERT が発生する前に、挿入されているテーブルに$uri値が既に存在するかどうかを確認したいのですuriが、その場合、その変数は$uri = $uri."-"date("m-d-y");どうすればわかりますか? 私はいくつかの調査を行い、使用する必要があると信じるようになりましたINSERT...ON DUPLICATE KEY UPDATEか?

4

2 に答える 2

0

おそらくこれは、uriが主キーであることが原因である可能性があります。このためには、おそらく代理キーを作成する必要があります。これにより、複製が可能になります。それが本当にあなたが必要とするものであるならば。

于 2012-05-02T15:34:53.317 に答える
0

トリガーに興味があるかどうかはわかりませんが、トリガーに依存できますBEFORE INSERT。トリガーは、uri挿入される新しいエントリに dup エントリがあるかどうかを確認し、ある場合は 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 NEW.uri=@modified_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挿入されたものが渡されたものと異なる場合、変更された値が何であるかを知るためのハンドルがあることを確認してください。

于 2012-05-02T20:57:08.457 に答える