2

我正在编写一个脚本,检查 url 是否已存在于数据库中,如果是,则在最后添加额外的 -1 或 -2 等。我找到了这个脚本

但它需要在添加-1 后再次检查它。因为它可能已经存在。我怎样才能做到这一点?我累了我这样

        $query = mysql_query("SELECT * FROM posts WHERE url='$url'");   

        while ( $query ) {      

            $result = mysql_fetch_assoc($query);
            $url = $result['url'];
            $urlnew = $result['url'];   
            $oldurl = $url;             
            $first = 1;
            $separator = '-';

            while ( $urlnew == $url ) {

                $url = preg_match('/(.+)'.$separator.'([0-9]+)$/', $urlnew, $match);        

                $urlnew = isset($match[2]) ? $match[1].$separator.($match[2] + 1) : $url.$separator.$first;

                $first++;

            }
        $url = $urlnew;
        }

上面的新代码工作得很好。但它只检查一次。我怎样才能让它检查直到它在数据库中不存在?

尝试在 $url -$urlnew 之后在底部添加一个新的 sql 查询,但它只会破坏函数。

编辑

这是正确的脚本:D

$query = mysql_query("SELECT * FROM posts WHERE url LIKE '%".$url."%'");    

if ( $query ) {

    while ( $result = mysql_fetch_assoc($query) ) {     

        $url = $result['url'];
        $urlnew = $result['url'];           
        $first = 1;
        $separator = '-';


        while ( $urlnew == $url ) {

            preg_match('/(.+)'.$separator.'([0-9]+)$/', $urlnew, $match);       

            $urlnew = isset($match[2]) ? $match[1].$separator.($match[2] + 1) :$url.$separator.$first;

            $first++;   

        }

    }
}                       

$url = $urlnew;
4

2 回答 2

2

您的代码可能容易受到SQL 注入的影响。您应该考虑改用PDOMySQLi

以下是您如何执行此操作的示例:

$url = 'www.example.com';
$i = 0;
$max_duplicates = 100;

$query = $pdo->prepare('SELECT COUNT(id) count FROM urls WHERE url=?');
while ($i++ < $max_duplicates) {
  $result = $query->execute($url);

  if (!$result->fetch(PDO::FETCH_OBJ)->count)
    break;

  if ($i == 1) {
    $url = $url . '-1';
  } else {
    $n = $i > 10 ? 2 : 1;
    $url = substr($url, -$n) . $i;
  }
}
于 2013-05-22T15:30:51.633 回答
1

这是我用来满足我的需要的

function checkLink($link, $counter=1){
    global $connect;
    $newLink = $link;
    do{
        $checkLink = mysqli_query($connect, "SELECT id FROM table WHERE link = '$newLink'");
        if(mysqli_num_rows($checkLink) > 0){
            $newLink = $link.'-'.$counter;
            $counter++;
        } else {
            break;
        }
    } while(1);

    return $newLink;
}

$link = 'www.example.com';
$uniquelink = checkLink($link);
于 2017-07-07T06:09:35.363 回答