簡體   English   中英

如何從MySql中檢索信息而忽略特殊字符?

[英]How do I retreive information from MySql ignoring special characters?

我有以下簡單的搜索查詢代碼:

function explode_search($squery, $column, $db, $link) {
global $conn;

$ven = explode(' ', safeInput(str_replace(',', '', $squery)));
$ven2 = array_map('trim', $ven);
$qy = ''.$column.' LIKE "%'.implode('%" AND '.$column.' LIKE "%', $ven2).'%"';

$query = 'SELECT DISTINCT '.$column.', id, work_composer FROM '.$db.' WHERE '.$qy.' ORDER BY '.$column.' LIMIT 100';
$result = mysqli_query($conn, $query);
while ($row = mysqli_fetch_assoc($result))  {

    echo '<div><span class="mdmtxt" style="margin-bottom:5px;"><a href="'.$link.'.php?id='.$row['id'].'">'.$row[$column].'</a></span> <span class="mdmtxt" style="opacity:0.6;">('.fixcomp(cfid($row['work_composer'], 'cffor_composer', 'composer_name')).')</span></div>';
}   
}

(safeInput函數消除了“和”以及其他可能的問題)

它可以正常工作。

當有人尋找“斯蒂芬妮”時,我也希望他們也找到“斯蒂芬妮”(反之亦然),或者如果他們正在尋找“慕尼黑”,則“慕尼黑”也應出現在列表中。

有沒有辦法使MySQL匹配那些搜索查詢,而與所涉及的特殊字符無關?

您想使用所謂的“參數化查詢”。 大多數語言都有它們,它們被用來保護輸入並防止受到攻擊。

在您習慣了它們之后,它們也非常容易使用。

您從這樣的簡單查詢開始

$stmt = $mysqli->prepare("SELECT District FROM City WHERE Name=?")

然后將所有實際數據替換為? 秒。

然后,您綁定每個參數。

$stmt->bind_param("s", $city);

然后調用$stmt->execute();

可以在這里找到更多信息: http : //php.net/manual/en/mysqli.prepare.php

在大學上一次,我們的教授讓我們使用了沒有參數化查詢的庫,所以我自己編寫了一個實現。 學說非常棒,可以為您處理所有這一切。 我總是依靠別人為我做這些事情,而不是編寫自己的實現。 這樣您會遇到麻煩。 關於不重新發明新類型的文章也很多,這基本上就是您正在做的事情。 類型有問題。 類型需要測試。 這種事情在其他實現中經過了很好的測試,而不是您的。

暫無
暫無

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

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