1

URLを投稿するための文字列を生成したい。次に、投稿の URL を のようhttp://www.mydomain.com/post/afCeYkにして、この URL を mysql に保存します。繰り返しを避けるために、最初に mysqlが既に存在urlするかどうかを確認する必要があると思います。url私のコードでは、一度チェックしただけで、2 番目の生成文字列がまだ存在していないことを確認できません。では、ループを作成するにはどうすればよいでしょうか。

$shufstr = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ";
$rdstr = substr(str_shuffle($shufstr),0,6);
$query =  mysql_query("select * from table where post_url = '".$rdstr."'");
if(mysql_num_rows($query)>0){
    //insert the url rules into db  
}else{
    //generate a new string and check the db again  
}
4

3 に答える 3

2

データベースに一度クエリを実行して、テーブルからすべてのデータを収集してから、文字列を生成し、取得した配列と照合する必要があります。

データベースに何度もクエリを実行するのとは対照的に、これにはパフォーマンス上の利点があります。

(実際のコードではありません)

$url_list = query("SELECT `post_url` FROM `table`");
do {
    $random_string = generate_random_string();
}
while(!in_array($random_string, $url_list));

また、列を作成することで重複が入力されていないことを確認してUNIQUEください。

于 2012-04-27T22:45:05.077 に答える
1

while ループを使用できますが、数千の URL を保存するとかなり遅くなります。

$shufstr = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ";
$validString=false;
while(!$validString){
    $rdstr = substr(str_shuffle($shufstr),0,6);
    $query =  mysql_query("select * from table where post_url = '".$rdstr."'");
    if(mysql_num_rows($query)==0){ //This is also different from your code as you don't want to do the insert if there is 1+ row with that url. 
        $validString=true;
        //insert the url rules into db  
    }
}
于 2012-04-27T22:31:13.107 に答える
1

それが私のプロジェクトである場合UNIQUE、post_url 列自体に制約を追加します。これにより、どのエントリ ポイント (アプリ、コマンド ラインなど) からも重複が入力されなくなります。MySQL 固有の詳細情報。

于 2012-04-27T22:32:39.850 に答える