【问题标题】:Codeigniter query with special character带有特殊字符的 Codeigniter 查询
【发布时间】:2017-10-06 07:21:45
【问题描述】:

我正在为我的项目使用 codeigniter 3。在我的数据库中,我有一个表正在被其他一些身份验证系统使用。当我使用特殊字符搜索某些值时遇到的问题(在数据内部/与数据连接)

$query = "SELECT * FROM tablename WHERE value = '$#!"."asdasd<3ddasd"."'";

即使 $this-&gt;db-&gt;query($query); 也没有返回任何理想的输出。在echo $this-&gt;db-&gt;last_query(); 之后,我得到了查询,它应该是这样的。如果我将它复制到 phpmyadmin,它会给出正确的结果。

根据 SO 和其他一些页面中的几次讨论,我也尝试过

  • $config['permitted_uri_chars'] = 'a-z 0-9~%.:_\-!#@&lt;$';
  • db is utf8_general_ci 是服务器连接排序规则。

我放在这里的查询只是为了向您展示一个场景,并且我使用了活动记录。

编辑 1:我使用 $this->input->post() 来获取输入。 编辑 2:刚刚发现不适用于 "$#!"."asdasd 但适用于 "$#!"."asdasd3ddasd"

【问题讨论】:

  • $#! 肯定需要在单引号字符串内
  • 因为SELECT * FROM tablename WHERE value = $#!'asdasd&lt;3ddasd' 不是一个有效的查询
  • 啊,来吧。 发表评论后不修复代码
  • 这里的查询拼写错误。
  • 问题不在于查询语法。这就是我修复它的原因。我的原始查询没问题,因为它适用于没有特殊字符的其他行。在给出 SO 时,我修改了查询,这就是为什么这里发生错误:D。还是谢谢你指点。

标签: php mysql codeigniter


【解决方案1】:

确保不要忘记对帖子值进行 urldecode。可能发生的情况是您使用 $_POST 而不是 codeigniter 函数 $this-&gt;input-&gt;post();

$_POST 不会在 codeigniter 函数执行时为您对参数进行 urldecode。

因此请确认您传递给查询的变量确实是 selänne 而不是 sel%C3%A4nne

如果是sel%C3%A4nne,则使用urldecode()$this-&gt;input-&gt;post()

来自This Question的参考

【讨论】:

  • 我用过 $this->input->post()
猜你喜欢
  • 1970-01-01
  • 2012-03-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-03-18
  • 2018-05-15
  • 1970-01-01
相关资源
最近更新 更多