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