【发布时间】:2013-04-05 00:00:01
【问题描述】:
我有一个为页面标题创建唯一 slug 的功能。它检查页面表中是否有可用的 slug,然后通过相应地添加一个“-int”来创建一个唯一的 slug。该函数适用于前三个条目,例如,“test slug”输入三次将创建“test-slug-1”、“test-slug-2”和“test-slug-3”。然后,我收到第四个条目的错误“致命错误:超过 30 秒的最大执行时间”。逻辑应该有问题,谁能帮我看看。下面是代码:
function createSlug($title, $table_name, $field_name) {
global $db_connect;
$slug = preg_replace("/-$/","",preg_replace('/[^a-z0-9]+/i', "-", strtolower($title)));
$counter = 1;
do{
$query = "SELECT * FROM $table_name WHERE $field_name = '".$slug."'";
$result = mysqli_query($db_connect, $query) or die(mysqli_error($db_connect));
if(mysqli_num_rows($result) > 0){
$count = strrchr($slug , "-");
$count = str_replace("-", "", $count);
if($count > 0){
$length = count($count) + 1;
$newSlug = str_replace(strrchr($slug , "-"), '',$slug);
$slug = $newSlug.'-'.$length;
$count++;
}else{
$slug = $slug.'-'.$counter;
}
}
$counter++;
$row = mysqli_fetch_assoc($result);
}while(mysqli_num_rows($result) > 0);
return $slug;
}
【问题讨论】:
-
您可以使用 LIKE 返回所有匹配的结果,而不是重复访问数据库,然后如果结果数大于 0,则将结果数的计数附加到 slug 中。跨度>
-
@Hailwood 没有想到这一点。感谢您的澄清
-
追加计数+1 不是最好的主意,因为第 3 条记录可能已被删除,但第 4 条记录没有被删除,留下 3 条记录,您添加的下一条记录会发生冲突