【问题标题】:Mysql trouble with like and or likeMysql 遇到like 和 or like 的问题
【发布时间】:2012-09-01 14:04:16
【问题描述】:
SELECT `id`, `name_person`, `person_content`, `datetime` 
FROM (`achievers_unverified`) 
WHERE ` name_person LIKE '%ved%' 
   OR ` person_content LIKE '%ved%' LIMIT 10

这是我尝试使用的 sql 查询,其中 ved 是搜索词。

我遇到了 1064 错误。

生成它的codeigniter代码是。

$this->db->select($select)
            ->from($table)
            ->like($str[1], $query, 'both')
            ->or_like($str[2], $query, 'both')
            ->limit($offset+10, $offset);

这是错误:

您的 SQL 语法有错误;检查手册 对应于您的 MySQL 服务器版本,以便使用正确的语法 在第 3 行的 'person_content LIKE '%ved%' LIMIT 10' 附近。

$str = explode(",", $select);
where $select = id, name_person, person_content, datetime

【问题讨论】:

  • $str[2]$str[1] 到底是什么?
  • WHEREOR 之后的随机刻度是多少?
  • 我用您的代码对此进行了测试,但没有得到这个结果,我得到了正确的结果。您是否 100% 确定此代码是导致问题的原因,并且您是否尝试过对值进行硬编码而不是使用变量?您使用的是哪个版本的 Codeigntier?
  • 如果您分析 sql 查询,那么您可以看到 ' 在靠近 like 的字段名称的末尾丢失。我在 phpmyadmin 中插入了它,它起作用了。但关键是为什么 codeigniter 会生成这样的查询
  • 我了解,我使用 CI 进行了测试,您的代码对我来说运行良好并生成了正确的查询。

标签: php sql codeigniter


【解决方案1】:

发现解决方案使用 trim($str[0]) 和 trim($str[1]) sapce 造成了问题。

【讨论】:

  • 啊哈你是对的!当我测试你的查询时,我使用的是 Datamapper ORM,它显然会自动处理这个问题,当我直接使用 ActiveRecord 尝试它时,它会导致同样的错误。很抱歉怀疑您并且没有生成准确的测试用例。因此,您的字段名称不正确,因为它们有多余的空格字符。
猜你喜欢
  • 1970-01-01
  • 2018-05-22
  • 2020-09-26
  • 2017-02-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多