使用子句WHERE中的动态变量进行查询

时间:2015-08-18 08:42:20

标签: mysql sql dynamic mysqli

我想创建一个动态SQL查询。例如,也许在某一点上我只想按名称搜索,而在其他情况下我想按姓名和姓氏搜索。只有sql_query填充了params,这是有效的吗?

 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);
    }


}

谢谢。

1 个答案:

答案 0 :(得分:0)

您可以将查询更改为:

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

当你想按名称搜索时,test($ name,$ surname)的参数将是 - >试验('提供yourname''%&#39);

请注意,%是通配符,查询中的姓氏正在使用"喜欢"所以最后查询将是:

SELECT name FROM users WHERE name =' yourname'和姓氏一样'%'。 它将搜索的内容是数据' yourname'作为姓氏和姓氏的任何价值。

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

SELECT name FROM users WHERE name =' yourname'并且喜欢' yoursurname'。 它将搜索的内容是数据' yourname'作为名称和'你的名字'作为姓氏。因此,只使用单个查询就可以解决这两个目的