簡體   English   中英

如何在CONCAT中正確使用通配符

[英]How to properly use Wildcard with CONCAT

(擾流器:標題與代碼錯誤無關。

我正在創建一個實時搜索系統,旨在向用戶顯示我網站上已列出的可能事件類型。 在進行推測時,我可能看不到通配符綁定錯誤。

我嘗試使用不同類型的“ WHERE LIKE”語句,其中大多數根本不起作用。 例如,我嘗試使用占位符查詢(問號),但那根本不起作用。 如果我在數據庫上手動運行此查詢,我將獲得期望的結果。

這就是我的代碼的樣子,變量$ q是使用$ _GET方法獲得的。

$query = $pdo->prepare('SELECT DISTINCT EventCategory FROM Events
             WHERE EventCategory LIKE CONCAT(\'%\',:q,\'%\')');
$query->bindParam(":q", $q);
$query->execute();
$row = $query->fetch(PDO::FETCH_ASSOC);
while ($row = $query->fetchObject()) {
    echo "<div>  $row->EventCategory </div>";
}

預期的結果將是:如果$ q等於n,則返回Meeting and Nightlife。 當$ q等於ni時,僅返回夜生活。

搜索不區分大小寫,N和n被同等對待。

SHOW CREATE TABLE Events查詢返回以下內容:

  CREATE TABLE `Events` (
 `ID` int(11) NOT NULL AUTO_INCREMENT,
 `Name` varchar(100) NOT NULL,
 `Image` varchar(600) NOT NULL,
 `Date` date NOT NULL,
 `Description` varchar(1200) NOT NULL,
 `SpacesAvailable` int(11) NOT NULL,
 `EventCategory` varchar(50) NOT NULL,
 `Trending` varchar(30) DEFAULT NULL,
 `TrendingID` int(255) NOT NULL,
 `Sale` int(255) NOT NULL,
 PRIMARY KEY (`ID`)
)DEFAULT CHARSET=latin1

顯示網站操作的圖像: https : //imgur.com/a/yP0hTm3如果您正在查看圖像,請從下至上查看。 謝謝

我懷疑您的EventCategory列中的默認排序規則區分大小寫。 這就是為什么NiniNightlife不匹配的原因。

請嘗試使用此查詢。

'SELECT DISTINCT EventCategory FROM Events WHERE EventCategory COLLATE utf8_general_ci LIKE CONCAT(\'%\',:q,\'%\')'

或者,如果您列的字符集不是unicode而是iso8859-1,請嘗試以下操作:

'SELECT DISTINCT EventCategory FROM Events WHERE EventCategory COLLATE latin1_general_ci LIKE CONCAT(\'%\',:q,\'%\')'

這說明了如何在MySQL上查找可用的字符集和排序規則。

如何更改數據庫,表,列的排序規則? 說明如何更改表或列的默認排序規則。 通常,這是一個好主意,因為歸類已納入索引中。

為了補充O.Jones的全面回答,另一個更簡單的解決方案是僅執行不區分大小寫的搜索,例如:

'SELECT DISTINCT EventCategory 
 FROM Events 
 WHERE UPPER(EventCategory) LIKE CONCAT(\'%\',UPPER(:q),\'%\')'

問題不在於LIKE ,而在於PHP和PDO中。 盯着代碼中$row的3種沖突用法:

$row = $query->fetch(PDO::FETCH_ASSOC);
while ($row = $query->fetchObject()) {
echo "<div>  $row->EventCategory </div>"; }

然后查看文檔和示例。 (對不起,我不會為您提供答案;您需要學習以了解它。)

暫無
暫無

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

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