簡體   English   中英

在WHERE之后使用mysqli_stmt_prepare綁定邏輯條件的查詢進行准備

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM