代码之家  ›  专栏  ›  技术社区  ›  cnrhgn

连接查询中的列以使用“LIKE”运算符

  •  0
  • cnrhgn  · 技术社区  · 6 年前

    我正在创建一个按名称搜索的搜索。在数据库里我有名字( fname )姓氏( lname ).

    当您按名字或姓氏(而不是全名)搜索时,搜索工作正常。

    e、 g输入'Joe'或'Smith'作为值将返回'Joe Smith'。输入'Joe Smith'作为值将不会返回任何记录。

    $value = "%".$search_val."%";
    $query = "SELECT fname, lname FROM users WHERE (fname LIKE ? OR lname LIKE ?)";
    
    if ($stmt = $conn->prepare($query)) {
    
        $stmt->bind_param('ss', $value, $value);
        $stmt->execute();
        $stmt->bind_result($fname, $lname);
        /* fetch values */
        while ($stmt->fetch()) {
            printf ("%s %s\n <br>", $fname, $lname);
        }
        /* close statement */
        $stmt->close();
    }
    
    /* close connection */
    $conn->close();
    ?>
    

    文件名 名字 在查询中?还是有别的解决办法?

    3 回复  |  直到 6 年前
        1
  •  1
  •   Varun.Kumar    6 年前

    用你的查询:-

    select concat(fname, ' ',lname) as name      
    from users       
    where name LIKE ? ;        
    
        2
  •  0
  •   lagripe    6 年前

    可以使用连接函数 refference :

    SELECT fname, lname 
    FROM users 
    WHERE CONCAT(fname, ' ', lname) LIKE ?
    
        3
  •  -1
  •   Klanto Aguntuk    6 年前

    不清楚您是使用$\u GET、$\u POST还是$\u REQUEST方法来获取搜索查询。你还绑定了你的结果,这是我在任何标准pdo语句中从未见过的。你的PDO声明很复杂。但是,您可以尝试以下操作:

    <?php
    //With positional placeholder & bindParam method
    
    $search_val = $_REQUEST['search_val'];
    $value1  = "%$search_val%";
    $value2  = "%$search_val%";
    
    
    $query = "SELECT fname, lname FROM users WHERE fname LIKE ? OR lname LIKE ?";
    
    if ($stmt = $conn->prepare($query)) {
    $stmt->bindParam(1, $value1);
    $stmt->bindParam(2, $value2);
    $stmt->execute();
    
    /* fetch values */
    while ($stmt->fetch()) {
    printf ("%s %s\n <br>", $fname, $lname);
    }
    /* close statement */
    $stmt->close();
    }
    
    /* close connection */
    $conn->close();
    ?>
    

    <?php
    //With named placeholder & bindValue method
    
    $search_val = $_REQUEST['search_val'];
    $value  = "%$search_val%";
    
    
    $query = "SELECT fname, lname FROM users WHERE fname LIKE :value OR lname LIKE :value";
    
    if ($stmt = $conn->prepare($query)) {
    $stmt->bindValue(':value', $value);
    $stmt->execute();
    
    /* fetch values */
    while ($stmt->fetch()) {
    printf ("%s %s\n <br>", $fname, $lname);
    }
    /* close statement */
    $stmt->close();
    }
    
    /* close connection */
    $conn->close();
    ?>
    

    谢谢,