我已经尝试了多种方法,但我有一个客户在这个问题上相当挑剔,我不确定如何让这一切完全按照他的意愿发生。
我们有一个名为 Articles 的 Controller 。
要查找文章,我们使用路径/articles/year/month/date/article-title-as-is-in-database-but-highphenated
Controller 只获取数据的最后一部分,将连字符替换为空格,并在文章表中查找与字符串匹配的 article_title。
现在他有一些带有冒号和某些其他特殊字符的文章。
所以我的问题是,如果我们在数据库中有“This: is my article name”,他的首选链接将是“/this-is-my-article-name/”。好吧,查询没有返回结果因为我们什么都没有替换冒号..我们如何获取结果文章?!
我尝试了类似的东西:
$this->db->select('(SELECT * FROM articles WHERE REPLACE(REPLACE(REPLACE(articles.article_title, "-", ""), ":", ""),"!", "") LIKE "%'.$string.'%")', FALSE);
$query = $this->db->get();
return $query->row_array();
然而这并没有奏效——它只是导致了这个:
Error Number: 1241
Operand should contain 1 column(s)
SELECT (SELECT * FROM articles WHERE REPLACE(REPLACE(REPLACE(articles.article_title, "-", ""), ":", ""), "!", "") LIKE "%Computer Build of the Month : April 2015%")
Filename: C:\mstsage\system\database\DB_driver.php
Line Number: 331
感谢任何帮助我解决这个问题的天才!
最佳答案
出现此错误是因为您使用了错误的方法来执行查询。为了运行查询,您使用函数 $this->db->query
,参见 docs获取更多信息。
为了修复您遇到的错误,请将您的代码更改为:
$sql = '(SELECT * FROM articles WHERE REPLACE(REPLACE(REPLACE(articles.article_title, "-", ""), ":", ""),"!", "") LIKE "%'.$string.'%")';
$query = $this->db->query($sql);
return $query->row_array();
额外:Codeigniter 有一个 query builder class方便查询。
关于php - 如何忽略 CodeIgniter URL 段中的特殊字符以进行查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48959014/