自定义CakePHP order by子句用于jQuery自动完成

时间:2010-09-01 12:31:44

标签: php jquery cakephp autocomplete

我有一个位置数据库,用户可以通过输入和自动完成来选择。在我的CakePHP控制器中,我这样做:

    $locations = $this->Location->find('all', array(
        'conditions' => array('Location.name like' => '%'.$term.'%'),
        'fields' => array('Location.id', 'Location.name', 'Region.name'),
        'order' => array(
            array('Location.name = "'.mysql_real_escape_string($term).'"'
                => 'desc'),
            'Location.name'
        ),
        'limit' => 10,
        'recursive' => 1,
    ));

它工作得非常好,但感觉就像一个黑客,而且我宁愿不自己逃避SQL文字。

需要第一个order by子句,因为完美匹配可能无法使其成为按字母顺序排序的列表的顶部。

我考虑将等同测试移到虚拟领域,但是当$ term是动态的时候,我觉得这不是一个非常优雅的解决方案。

如何以更好的方式实现这一目标?

1 个答案:

答案 0 :(得分:0)

就编写查询的结构而言,这很好。

关于必须自己逃避SQL,这是from the Cookbook

  

CakePHP已经保护你免受攻击   如果您使用CakePHP的ORM,则使用SQL注入   方法(例如find()和save())   和正确的数组符号(即。   array('field'=> $ value))而不是   原始SQL。用于对XSS进行消毒   它通常更好地保存原始HTML   在数据库中没有修改和   在当时消毒   输出/显示。