【问题标题】:CodeIgniter inserting apostrophes in to database queryCodeIgniter 在数据库查询中插入撇号
【发布时间】:2012-04-28 11:21:26
【问题描述】:

我有一个奇怪的问题一直困扰着我。我要做的就是在数据库表上运行查询,但由于某种原因,CodeIgniter 将撇号放入查询中,这随后会破坏页面。

我的代码如下所示:

$this->db->select("SUBSTRING(body,5)"); 
$this->db->order_by("date", "desc");
$this->data['query'] = $this->db->get_where('blog-entries', array('status' => 'P'), 3);

但我在此页面上遇到错误:

Error Number: 1064

You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'FROM (`blog-entries`) WHERE `status` = 'P' ORDER BY `date` desc LIMIT 3' at line 2

查询实际运行为:

SELECT SUBSTRING(body, `5)` FROM (`blog-entries`) WHERE `status` = 'P' ORDER BY `date` desc LIMIT 3

正如您所见,由于某种原因,在子字符串中的数字 5 周围添加了撇号。如果我删除子字符串,那么一切正常,如果我删除撇号并直接在我的数据库上运行查询,它也可以工作。

有没有人知道为什么会发生这种情况或有解决方案?

非常感谢您的帮助。

非常感谢,

G.

【问题讨论】:

  • 实际上是添加了反引号,而不是撇号。只是为了澄清。
  • 是否添加FALSE 作为第二个参数,像这样$this->db->select("SUBSTRING(body,5)", FALSE); 修复它?它应该停止 CodeIgniter 添加反引号。
  • 这就是为什么我讨厌这些愚蠢的查询构建器,将简单的查询变成屏幕高的意大利面条块
  • 公平地说,他们中的大多数还可以选择手动输入整个查询而不使用构建器。你有一个选择。

标签: php database codeigniter substring apostrophe


【解决方案1】:

使用这个:

$this->db->select("SUBSTRING(body,5)", FALSE);

默认情况下,Codeigniter 会尝试在它认为相关的地方添加反引号。有时它会在不应该的地方添加它们。将FALSE 作为第二个参数传递会阻止它这样做。

【讨论】:

  • 非常感谢您的回复。这确实消除了数据库错误,但是,它似乎没有运行查询,因为我在从查询中写出字段的页面上出现错误:
  • 我收到“消息:未定义的属性”错误消息。我将尝试获取“body”字段并将其子串直接从控制器输出字段,而不是整个查询。
  • 实际上,我想我意识到发生了什么。我只需要将其他字段添加到 SELECT 中!
  • 我最终选择了定义整个查询而不是使用查询生成器。非常感谢你们的帮助!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-08-14
  • 2016-01-25
  • 1970-01-01
  • 1970-01-01
  • 2011-07-26
相关资源
最近更新 更多