使用带[[:<:]] [[:>:]]的REGEXP查询CodeIgniter时出错

时间:2015-05-20 13:06:59

标签: php mysql regex codeigniter

使用REGEXP [[:<:]][[:>:]]使用$this->db->get_where('news', array("News_Tag REGEXP BINARY "=>"[[:<:]]data[[:>:]]")); 查询CodeIgniter上的数据时出现问题。

系统会在小于号的正面和背面添加空格字符。

例如:

SELECT * FROM `web_news` WHERE `News_Tag` REGEXP BINARY '[[: < :]]data[[:>:]]'

将成为:

<script>
    var codesArray = [];

    function ajax_get_results() {

        var results = document.getElementById("results");
        var select = document.getElementById("code");
        var hr = new XMLHttpRequest();
        hr.open("GET", "ainekood_pohiandmed.json", true);
        hr.setRequestHeader("Content-type", "application/json", true);
        hr.onreadystatechange = function() {
            if(hr.readyState == 4 && hr.status == 200){
                var data = JSON.parse(hr.responseText);
                results.innerHTML = "";
                // <div id="results"> - Should show this in the div!
                results.innerHTML = "<b>"+data[0].ainekood+"</b></br>"+data[0].aineNimi+" (<i>"+data[0].courseName+"</i>)</br>EAP: "+data[0].eap+"</br>Hindamisviis: "+data[0].hindamisviis+"</br>Semester: "+data[0].semester+"</br>Oppejoud: "+data[0].ppejud+"</hr>";
                // Adds the codes into the Select-form
                for(var obj in data){
                    var opt = document.createElement('option');
                    var code = data[obj].ainekood;
                    opt.value = code;
                    opt.innerHTML = code;
                    select.appendChild(opt);
                    // Adds the codes into the array
                    codesArray.push(code);
                }
                // Gets all of the codes
                //console.log(codesArray);
            }
        }
        hr.send(null);
        results.innerHTML = "requesting...";
        // Doesn't get any codes from here...
        //console.log(codesArray);
    }

    // This doesn't work...
    function expandDivs(elem) {
        for(var code in codesArray){
            if(elem.value == codesArray[code]){
                document.getElementById('results').style.display = "block";
                console.log("Match found: "+elem.value+" EQUALS "+codesArray[code]);
            }else{
                document.getElementById('results').style.display = "none";
                console.log("No matches found");
            }
        }
    }

    // Manually comparing works
    function expandDiv(elem) {
        if(elem.value == "AIA6010" || elem.value == "AIA6020"){
            document.getElementById('results').style.display = "block";
            console.log("Match found: "+elem.value);
        }else{
            document.getElementById('results').style.display = "none";
            console.log("No matches found");
        }
    }
</script>

并导致错误。

我该如何解决这个问题?

2 个答案:

答案 0 :(得分:2)

有同样的问题,并通过从正则表达式定义中删除CodeIgniter的Active Records转义来解决它。

只需在get_where子句中添加FALSE作为第3个参数,并在表达式中添加单引号:

$this->db->get_where('news', array("News_Tag REGEXP BINARY "=>"'[[:<:]]data[[:>:]]'"), FALSE);

答案 1 :(得分:0)

感谢Danyal Sandeelo的回答,我找到了解决方案:

$this->db->query("SELECT * FROM web_news WHERE News_Tag REGEXP BINARY
'[[:<:]]data[[:>:]]'");