php - 在 codeigniter 中反向通配符搜索

标签 php mysql codeigniter

我正在将一个基于片段的内容管理系统应用到我当前的项目中。片段可以通过完整 url 的完全匹配回落到部分 url 上的通配符匹配或最终默认片段与页面相关联。

为了实现这一点,我创建了一个带有通配符标志的页面关联表,系统首先根据非通配符关联检查当前 url,如果没有找到匹配项,它会检查通配符所在的部分 url标志已设置。

为了实现这一点,我从数据库中获取所有部分 url,并将它们放入一个数组中,然后遍历该数组以检查是否与当前 url 匹配:

protected function _check_wildcard($url = NULL)
{
    if($url)
    {
        $q = $this->db->where('wildcard' ,'Y')
                ->from('content')
                ->get();
        $wildcards = $q->result_array();

        foreach($wildcards AS $wildcard)
        {
            if(strpos($url,$wildcard['url']) !== FALSE )
            {
                return $wildcard['snippet_id'];
            }
        }
    }
    else
    {
        return NULL;
    }
}

任何人都可以建议一种更好的方法来做到这一点 - 最好是不需要每次加载页面时都必须不断下载所有通配符的完整列表的方法,因为我担心这会对系统的可扩展性?

最佳答案

您可以直接查询您的数据库,而不是加载所有通配符。假设 MySQL , 此查询检查给定 URL 字符串中的通配符 URL。例如:

// Keeping your current wildcard = 'Y' condition and adding the wildcard check.
$where = "wildcard = 'Y' AND INSTR('" . $url . "', url) > 0 ";
$this->db->where($where)->from('content')->get();

您可以检查您的数据库的文档,看它是否支持 INSTR 或类似的功能。

如果此查询未返回任何行,则可以返回 NULL,如果有行,则可以返回第一个 snippet_id

希望这对您有所帮助!

关于php - 在 codeigniter 中反向通配符搜索,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13268300/

相关文章:

php - CodeIgniter 中的 CKEditor

javascript - UAT 环境中 url 未定义的奇怪问题。在本地它正在工作 :

MySql 对来自这两个或多个子查询的字段进行分组和求和

mysql - 警告 1329 未获取数据

mysql - 删除崩溃的 Innodb 表

php - 使用 MySQLi 设置字符集

php - Symfony - DateTime 类的对象无法转换为字符串

php - 陷入从变量 CodeIgniter 回显数据的状态

codeigniter - CodeIgniter 会自动防止 SQL 注入(inject)吗?

php - codeigniter 中的 'Student_Name' 中的未知列 'field list' 文件名 : E:/xampp/htdocs/codeIgniter/CodeIgniter-3. 1.4/system/database/DB_driver.php