在 WHERE 子句中使用动态变量查询

Query with dynamic variables in clause WHERE

我想创建一个动态 SQL 查询。例如,也许在某一时刻我只想按名字搜索,而在其他情况下我想按名字和姓氏搜索。仅 sql_query 填充参数是否可行?

 public static function test($name,$surname) {

    $db = DBInstance::getInstance();
    $mysqli = $db->getConnection();

    $sql = 'SELECT name FROM users WHERE ' .
            'name = ? AND ' .
            'surname = ?';

    /* Prepare statement */
    $stmt = $mysqli->prepare($sql);
    


    /* Bind parameters. Types: s = string, i = integer, d = double,  b = blob */
    $stmt->bind_param('ss', $name, $surname);

    /* Execute statement */
    $stmt->execute();

    /* Fetch result to array */
    $res = $stmt->get_result();
    while ($row = $res->fetch_array(MYSQLI_ASSOC)) {
       var_dump($row);
    }

    
}

您可以将查询更改为:

SELECT name FROM users WHERE name = ? AND 姓 喜欢 ?

当您想按姓名搜索时,test($name,$surname) 的参数将是 --> test('yourname','%');

这里注意 % 是通配符,查询中的姓氏使用 "like" 所以最后查询将是:

SELECT name FROM users WHERE name = 'yourname' AND surname like '%'. 它将搜索的是数据 'yourname' 作为姓名和姓氏的任何值。

现在,如果您想按名字和姓氏进行搜索,那么您可以将函数调用为 --> 测试('yourname','yoursurname') 所以查询将变为:

SELECT 来自用户的姓名,其中姓名 = 'yourname' 和姓氏 'yoursurname'。 它将搜索的是 'yourname' 作为姓名和 'yoursurname' 作为姓氏的数据。因此,只需使用一个查询就可以同时解决这两个问题