我们目前使用lib_mysqludf_pregudfs与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');
给什么?
最佳答案
在这种情况下,最好以字符串的形式手动编写自己的子句。
顺便说一句,您可以向where()
方法添加第三个参数并将其设置为FALSE
以防止codeigniter使用反勾号保护字段或表名:
$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');
关于php - Codeigniter,Activerecord和MySQL UDF,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/18479351/