在 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' 作为姓氏的数据。因此,只需使用一个查询就可以同时解决这两个问题
我想创建一个动态 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' 作为姓氏的数据。因此,只需使用一个查询就可以同时解决这两个问题