Codeigniter,Activerecord和MySQL UDF

时间:2013-08-28 04:14:33

标签: php mysql codeigniter activerecord user-defined-functions

我们目前正在使用lib_mysqludf_preg UDF与Codeigniter和Activerecord进行正则表达式模式匹配。使用PREG_REPLACE UDF,我能够使用自定义查询删除所有非数字和字母字符,Activerecord失败并返回错误result() on a non object

使用:

$query = $this->db->query(sprintf("SELECT * FROM table WHERE PREG_REPLACE('/[^a-zA-Z 0-9]+/' , '', UPPER(first_name)) = '%s' AND PREG_REPLACE('/[^a-zA-Z 0-9]+/' , '', UPPER(last_name)) = '%s'", $first_name, $last_name));

不起作用:

$this->db->where("PREG_REPLACE('/[^a-zA-Z 0-9]+/' , '', UPPER(first_name))", $first_name);
$this->db->where("PREG_REPLACE('/[^a-zA-Z 0-9]+/' , '', UPPER(last_name))", $last_name);

$query = $this->db->get('table');

是什么给出了?

1 个答案:

答案 0 :(得分:3)

在这种情况下,最好手动编写自己的子句作为字符串。

顺便说一句,您可以向where()方法添加第三个参数并将其设置为FALSE,以防止CodeIgniter保护您的字段表< / em>带反引号的名字:

$this->db->where("PREG_REPLACE('/[^a-zA-Z 0-9]+/' , '', UPPER(first_name)) = '$first_name'", NULL, FALSE);
$this->db->where("PREG_REPLACE('/[^a-zA-Z 0-9]+/' , '', UPPER(last_name)) = '$last_name'", NULL, FALSE);

$query = $this->db->get('table');