Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/252.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 类SQL函数_Php_Codeigniter - Fatal编程技术网

Php 类SQL函数

Php 类SQL函数,php,codeigniter,Php,Codeigniter,我对Codeigniter上的SQL有问题。 我想看看以字母A开头的客户的名字。。从A到C。。所以A-B-C 我写这段代码: if ((isset($filtri["name_from"])) && ($filtri["name_from"])) : $this->db->where("clienti.nome LIKE ",$filtri["name_from"]."%"); endif; if ((isset($filt

我对Codeigniter上的SQL有问题。 我想看看以字母A开头的客户的名字。。从A到C。。所以A-B-C

我写这段代码:

    if ((isset($filtri["name_from"])) && ($filtri["name_from"])) :
        $this->db->where("clienti.nome LIKE ",$filtri["name_from"]."%");
    endif;  
    if ((isset($filtri["name_to"])) && ($filtri["name_to"])) :

        for($i = $filtri["name_from"]++; $i <= $filtri["name_to"]; $i++){

            $this->db->or_where("clienti.nome LIKE ",$i."%");
        }

    endif;
if((isset($filtri[“name_from”])和&($filtri[“name_from”])):
$this->db->where(“clienti.nome LIKE”,$filtri[“name_from”]。“%”);
endif;
如果((isset($filtri[“名称到”])和($filtri[“名称到”]):
对于($i=$filtri[“name_from”]++;$i db->或_where(“clienti.nome LIKE”,$i.“%”);
}
endif;
但是当我使用另一个过滤器时,它不起作用……为什么?

文档()使用了不同的方法:

如果要控制通配符(%)的位置,可以使用可选的第三个参数。选项为“before”、“after”、“none”和“both”(这是默认值)

因此,您可以尝试:

if ((isset($filtri["name_from"])) && ($filtri["name_from"])) :
    $this->db->like("clienti.nome",$filtri["name_from"],"after");
endif;  
if ((isset($filtri["name_to"])) && ($filtri["name_to"])) :

    for($i = $filtri["name_from"]++; $i <= $filtri["name_to"]; $i++){

        $this->db->or_like("clienti.nome",$i,"after");
    }

endif;
if((isset($filtri[“name_from”])和&($filtri[“name_from”])):
$this->db->like(“clienti.nome”,$filtri[“name_from”],“after”);
endif;
如果((isset($filtri[“名称到”])和($filtri[“名称到”]):
对于($i=$filtri[“name_from”]++;$i db->或类似(“clienti.nome”,$i,“after”);
}
endif;

既然您使用的是Query Builder,为什么不使用正确的方法来处理
like
呢,而不是对一些可能有效或可能无效的内容进行黑客攻击呢?您应该查看
$this->db->like()
语法确定,但当我使用另一个筛选器时..比如Date,filter[“name\u from”]打印所有名称。我看不到您的全部代码,只能看到您在此处编写的部分。对于您要求的问题,这是正确的解决方案。您可能不想重构表单或在stackoverflow上创建新问题。
if ((isset($filtri["name_from"])) && ($filtri["name_from"])) :
    $this->db->like("clienti.nome",$filtri["name_from"],"after");
endif;  
if ((isset($filtri["name_to"])) && ($filtri["name_to"])) :

    for($i = $filtri["name_from"]++; $i <= $filtri["name_to"]; $i++){

        $this->db->or_like("clienti.nome",$i,"after");
    }

endif;