Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/unix/3.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选择列中包含任何word from字符串的行_Php_Mysql_Sql - Fatal编程技术网

Php SQL选择列中包含任何word from字符串的行

Php SQL选择列中包含任何word from字符串的行,php,mysql,sql,Php,Mysql,Sql,我有一张桌子,上面有“id”、“日期”、“月份”、“姓名” 身份证件 白天 月 名称 1. 1. 5. 亚当 2. 2. 5. 帕维尔·皮特 您可能希望使用来匹配模式 SELECT * FROM users WHERE lower(name) LIKE '%$name%'; %是通配符运算符,因此允许在名称之前或之后使用任何内容。您可以使用REGEXP SELECT * FROM `users` WHERE LOWER(name) RLIKE "[[:<:]]$name[[:>

我有一张桌子,上面有“id”、“日期”、“月份”、“姓名”

身份证件 白天 月 名称 1. 1. 5. 亚当 2. 2. 5. 帕维尔·皮特 您可能希望使用来匹配模式

SELECT * FROM users WHERE lower(name) LIKE '%$name%';
%是通配符运算符,因此允许在名称之前或之后使用任何内容。

您可以使用REGEXP

SELECT * FROM `users` WHERE LOWER(name) RLIKE  "[[:<:]]$name[[:>:]]"
尝试使用

例如:


如果将SQL LIKE子句与%个字符一起使用,则它将像UNIX中的元字符*一样工作,同时在命令提示符下列出所有文件或目录。

也许您正在查找的是:

编辑:您不应拥有名为a的用户:-

EDIT2:刚刚发现,sql server标记已被删除

DECLARE @peopleHolidays TABLE(id INT,day INT,month INT, name VARCHAR(100));
INSERT INTO @peopleHolidays VALUES(1,1,5,'Adam'),(2,2,5,'Pavel a Petr'),(2,3,5,'Adam a Max'),(2,4,5,'Max a Petr');

DECLARE @users TABLE(id INT IDENTITY,name VARCHAR(100));
INSERT INTO @users VALUES('Adam'),('Pavel'),('Petr'),('Max');

SELECT *
FROM @peopleHolidays AS pH
CROSS APPLY(SELECT CAST('<r>' + REPLACE(pH.name,' ','</r><r>') + '</r>' AS XML)) AS AsXml(x)
CROSS APPLY
(
    SELECT * FROM @users AS u
    WHERE u.name IN
    (
        SELECT a.b.value('.','varchar(max)')
        FROM AsXml.x.nodes('/r') AS a(b)
    )
) AS UsersInHoliday

正如其他海报所说,LIKE将为字符串的一部分提供一个比较器。您可以对like参数使用字符串连接,因此可以安全地传递正在搜索的字符串,而不会有太大的SQL注入风险

select * from users where name like '%' + :name + '%'
用PHP编写语句


所以我用PHP而不是SQL解决了这个问题,代码看起来就像

function isClientInDb($name, $array){
        global $db;

        $name = strtolower($name);      

        $query = "SELECT * from `clients` where LOWER (name) = '".$name."' and `uid`='".$_SESSION['uid']."'";
        $result = $db->select($query);      
        if(count($result) < 1){

        if(intval(preg_match('/\s/',$name)) > 0){
            if(strpos($name, ",")){
                $pos = strpos($name, ",");      
                $minus = 1; 
            }else{
                if(strpos($name, "a")){
                $pos = strpos($name, "a");  
                $minus = 0;         
                }else{
                $pos = strpos($name, " ");
            }           
            }           
            $pole = array(strtolower(substr($name,0,$pos)), strtolower(substr($name,-($pos+$minus))));

            $sql = "lower(name) = '".$pole[0]."' or lower(name) = '".$pole[1]."'";              
            }else{
            $sql = "lower(name) LIKE '%".$name."%'";            
            }       

        $query = "SELECT * from `clients` where ( $sql ) and `uid`='".$_SESSION['uid']."'";
        $result = $db->select($query);
        if(count($result) < 1){
            return false;           
                        }else{
                            return true;
                        }


        }else{
        return true;        
        }   
        }   

您是否可以使用select*从名称为%.$name.%的用户中选择逻辑?这不起作用。我需要选择是否包含StringYou使用全文搜索吗?我会尝试,这个选项我没有尝试。不起作用…重要的是$name=Pavel一个Petr和user中的name列是Pavel@user5366720你的问题我不清楚。你能提供一个样本数据和你的预期结果吗?
function isClientInDb($name, $array){
        global $db;

        $name = strtolower($name);      

        $query = "SELECT * from `clients` where LOWER (name) = '".$name."' and `uid`='".$_SESSION['uid']."'";
        $result = $db->select($query);      
        if(count($result) < 1){

        if(intval(preg_match('/\s/',$name)) > 0){
            if(strpos($name, ",")){
                $pos = strpos($name, ",");      
                $minus = 1; 
            }else{
                if(strpos($name, "a")){
                $pos = strpos($name, "a");  
                $minus = 0;         
                }else{
                $pos = strpos($name, " ");
            }           
            }           
            $pole = array(strtolower(substr($name,0,$pos)), strtolower(substr($name,-($pos+$minus))));

            $sql = "lower(name) = '".$pole[0]."' or lower(name) = '".$pole[1]."'";              
            }else{
            $sql = "lower(name) LIKE '%".$name."%'";            
            }       

        $query = "SELECT * from `clients` where ( $sql ) and `uid`='".$_SESSION['uid']."'";
        $result = $db->select($query);
        if(count($result) < 1){
            return false;           
                        }else{
                            return true;
                        }


        }else{
        return true;        
        }   
        }