php - 如何忽略 CodeIgniter URL 段中的特殊字符以进行查询

标签 php mysql codeigniter

我已经尝试了多种方法,但我有一个客户在这个问题上相当挑剔,我不确定如何让这一切完全按照他的意愿发生。

我们有一个名为 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/

相关文章:

php - Laravel 5.2 Socialite 检索空电子邮件

php - 优化相关子查询

java - 尝试将 java 连接到 mysql 时出现 MySQLSyntaxErrorException

php - 我如何获取 codeigniter 中的最后一行值

代码点火器 : Showing error as ' Unable to select the specified database: project' in Windows XP

mysql - 如何将值添加到 doctrine 中的数组模型?

php - 面试题: In php,是123==0123?

php - 是否可以编写一个接受电子邮件的 php 脚本(如电子邮件机器人)

php - 无法让 mysqli_result::$fetch_all 工作

Mysql 并在日期时间列中插入 ''(空不为空)