Php 如果字符串已经存在,请在其后面添加数字
我正在编写一个脚本,检查数据库中是否已经存在url,如果是,则在最后添加一个额外的-1或-2等。我找到了剧本 但它需要在添加-1后再次检查它。因为它可能已经存在。我该怎么做?我这样累了Php 如果字符串已经存在,请在其后面添加数字,php,mysql,Php,Mysql,我正在编写一个脚本,检查数据库中是否已经存在url,如果是,则在最后添加一个额外的-1或-2等。我找到了剧本 但它需要在添加-1后再次检查它。因为它可能已经存在。我该怎么做?我这样累了 $query = mysql_query("SELECT * FROM posts WHERE url='$url'"); while ( $query ) { $result = mysql_fetch_assoc($query);
$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;
您的代码可能容易受到攻击。你应该考虑使用或替代。 下面是一个示例,说明如何做到这一点:
$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;
}
}
$url='www.example.com';
$i=0;
$max_duplicates=100;
$query=$pdo->prepare('从url=?'的url中选择COUNT(id)COUNT);
而($i++<$max\u个副本){
$result=$query->execute($url);
if(!$result->fetch(PDO::fetch_OBJ)->计数)
打破
如果($i==1){
$url=$url'-1';
}否则{
$n=$i>10?2:1;
$url=substr($url,-$n)。$i;
}
}
以下是我用来满足需要的东西
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);
这是一个进步。我删除了我的否决票。
mysql\u fetch\u assoc
只返回一行。您的查询有可能返回多行吗?$this->increment\u string
工作正常吗?@Rocket Hazmat it dose。但它只检查一个url。并且不确定如何在将数字添加到后面后使其多次检查。@和0R1995,在循环之前定义$first
,然后在循环的最后一行之后定义$first=$first+1代码>我如何配置它来处理mysql_uu查询和函数?不确定如何使用$pdomysql_uuz已被弃用,并将在PHP5.5(目前处于RC发行阶段)中删除。查看有关如何使用pdo或mysqli的附加链接。当使用程序形式时,MySQLi几乎是替代品。我明白了,谢谢你的消息。我不知道它会掉下来。