簡體   English   中英

我如何使用 mysqli 使用 LIKE 進行查詢並獲得所有結果?

[英]How can I with mysqli make a query with LIKE and get all results?

這是我的代碼,但它不起作用:

$param = "%{$_POST['user']}%";
$stmt = $db->prepare("SELECT id,Username FROM users WHERE Username LIKE ?");
$stmt->bind_param("s", $param);
$stmt->execute();
$stmt->bind_result($id,$username);
$stmt->fetch();

這段代碼似乎不起作用。 我已經搜索了很多。 它也可能返回多於 1 行。 那么,即使它返回超過 1 行,我如何才能獲得所有結果呢?

以下是正確獲取結果的方法

$param = "%{$_POST['user']}%";
$stmt = $db->prepare("SELECT id,username FROM users WHERE username LIKE ?");
$stmt->bind_param("s", $param);
$stmt->execute();
$stmt->bind_result($id,$username);

while ($stmt->fetch()) {
  echo "Id: {$id}, Username: {$username}";
}

或者你也可以這樣做:

$param = "%{$_POST['user']}%";
$stmt = $db->prepare("SELECT id, username FROM users WHERE username LIKE ?");
$stmt->bind_param("s", $param);
$stmt->execute();

$result = $stmt->get_result();
while ($row = $result->fetch_assoc()) {
    echo "Id: {$row['id']}, Username: {$row['username']}";
}

我希望你意識到我直接從這里這里的手冊中得到了答案,這是你應該首先去的地方。


更新

從評論中發現 LIKE 通配符( _% )在參數化查詢中默認不會轉義,因此會導致意外結果。

因此,當使用“LIKE”語句時,請使用這個“負前瞻”正則表達式來確保這些字符被轉義:

$param = preg_replace('/(?<!\\\)([%_])/', '\\\$1',$param);

作為上述給定答案的替代方案,您還可以使用 MySQL CONCAT函數,因此:

$stmt = $db->prepare("SELECT id,Username FROM users WHERE Username LIKE CONCAT('%',?,'%') ");
$stmt->bind_param("s", $param);
$stmt->execute();

這意味着您不需要編輯您的$param值,但確實可以進行稍長的查詢。

答案顯然已經過時了,您甚至不需要使用 bind_param。

$querySql    = "SELECT * FROM table WHERE columnName LIKE :likeKeyWord";
$likeKeyWord = "%". $keyWord ."%";
$pdoStm      = $this -> db -> prepare($querySql);
$pdoStm -> execute([':likeKeyWord' => $likeKeyWord]);
return $pdoStm -> fetchAll();

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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