[英]Preparing a query with mysqli_stmt_prepare binding a logical criteria after WHERE
我需要根據隨時間變化的過濾器動態啟動查詢。 每當過濾器位於字符串變量$filter
。 我可以像下面的代碼一樣在WHERE
之后綁定它嗎? 它似乎不起作用。 我期望的結果查詢是SELECT NAME FROM PERSONA WHERE GENDER='F'
$filter = "GENDER='F'";
$stmt = mysqli_stmt_init($connection);
mysqli_stmt_prepare($stmt, "SELECT NAME FROM PERSONA WHERE ?");
mysqli_stmt_bind_param($stmt, 's', $filter);
您只能綁定值,不能綁定語法元素。 因此,要么保留gender
條件,然后綁定F
值:
mysqli_stmt_prepare($stmt, "SELECT NAME FROM PERSONA WHERE GENDER=?");
mysqli_stmt_bind_param($stmt, 's', 'F');
或使用字符串操作來構造查詢:
mysqli_stmt_prepare($stmt, "SELECT NAME FROM PERSONA WHERE $filter");
另一個答案顯然是錯誤的。 由於第一個建議根本無法回答問題,第二個建議僅適用於性別。 即使對於一個城市來說也是不可能的。
因此,您將必須動態創建查詢。
使用mysqli太麻煩了,所以我將展示如何使用PDO:
$sql = "SELECT NAME FROM PERSONA WHERE 1";
$filters = [];
$params = []
if ($gender)
{
$filters[] = " AND GENDER=:gender";
$params['gender'] = $gender;
}
$sql .= implode("", $filters);
$stmt = $pdo->prepare($sql);
$stmt->execute($params);
$data = $stmt->fetchAll();
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.