【问题标题】:CakePHP - how to handle double quote in conditions arrayCakePHP - 如何处理条件数组中的双引号
【发布时间】:2013-06-20 21:29:36
【问题描述】:

参见以下示例代码:

$conditions = array("Post.title" => 'This is a "Book"');
// Example usage with a model:
$this->Post->find('first', array('conditions' => $conditions));

因为 find() 实际上是在寻找 title = 'This is a \"Book\"',所以没有返回结果。我想知道如何防止 find() 添加反斜杠。还是有其他解决办法?

==固定==

*实际上是我使用updateAll($field, $conditions),而不是find()时出现的错误。我没有在文字值周围加上引号。例如, $field = array('title' => $some_title) 应该是 $field = array('title' => "'" . Sanitize::escape($some_title) . "'") 。不过不喜欢 CakePHP 处理这个问题的方式。*

【问题讨论】:

  • 我认为它会工作知道.. 你没有得到任何 OP
  • 什么蛋糕版本?此外,转义这些字符是正确的,并且仍然会返回正确的结果!

标签: cakephp


【解决方案1】:

你一定是误会了。错误必须在其他地方。 生成的 SQL 查询确实包含

 LIKE 'foo \"bar\"'

但这种转义实际上是故意的。 我仍然会使用foo "bar" 来打开数据库条目 - 我只是自己尝试使用 cake2.3/2.4。

所以 CakePHP 工作正常。

【讨论】:

  • 是的。我错了。实际上,当我使用 updateAll($field, $conditions) 而不是 find() 时会发生错误。我没有在文字值周围加上引号。例如, $field = array('title' => $some_title) 应该是 $field = array('title' => "'" . Sanitize::escape($some_title) . "'") 。不过不喜欢 CakePHP 处理这个问题的方式。
  • 你的意思是updateAll()需要手动转义?好吧,这种方法具有更大的灵活性(允许文字表达等)。你不能同时拥有它^^。
  • 但是您可能也很高兴听到对于 3.x 这将发生变化(对于 updateAll),因为当前的方式确实有点 hacky 并且不是很安全。
【解决方案2】:

刚刚检查了 cakePhp 版本 2.3.5,双引号工作正常,请检查下面的配置文件控制器代码。

$data = $this->Profile->find('all',array('conditions'=>array('Profile.type'=>'user "one"')));
pr($data);

【讨论】:

  • @AD7six 他当然可以,但是这个答案没有意义(它只是重复我的)。
  • @mark,为了您的好意,我们在这里尽可能提供正确的信息,我不是来收集硬币(声誉)的。我没有复制你的代码,我已经在我的系统上测试了相同的功能,然后在这里发布作为答案。请从你狭隘的思想中走出来。
  • 没错。那么,您提供了哪些“更多”正确信息?只是复制和粘贴别人对任何人都没有帮助:) 亲切的问候。
  • 证明这一点。致以最诚挚的问候:) :) :) :)
猜你喜欢
  • 2011-11-16
  • 2021-01-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-11-23
  • 1970-01-01
  • 2020-10-10
相关资源
最近更新 更多