我目前正在進行實時搜索,直接顯示來自mysql數據庫的結果。php和mysql實時搜索
該代碼的作品,但不是真的如我所願。
讓我們先從一個例子,使其更易於理解:
我的數據庫中有5列:
id, link, description, try, keywords
運行關鍵了Ajax請求的腳本如下:
$("#searchid").keyup(function() {
var searchid = encodeURIComponent($.trim($(this).val()));
var dataString = 'search=' + searchid;
if (searchid != '') {
$.ajax({
type: "POST",
url: "results.php",
data: dataString,
cache: false,
success: function (html) {
$("#result").html(html).show();
}
});
}
return false;
});
});
上results.php文件
看起來是這樣的:
if ($db->connect_errno > 0) {
die('Unable to connect to database [' . $db->connect_error . ']');
}
if ($_REQUEST) {
$q = $_REQUEST['search'];
$sql_res = "select link, description, resources, keyword from _db where description like '%$q%' or keyword like '%$q%'";
$result = mysqli_query($db, $sql_res) or die(mysqli_error($db));
if (mysqli_num_rows($result) == 0) {
$display = '<div id="explainMessage" class="explainMessage">Sorry, no results found</div>';
echo $display;
} else {
while ($row = $result->fetch_assoc()) {
$link = $row['link'];
$description = $row['description'];
$keyword = $row['keyword'];
$b_description = '<strong>' . $q . '</strong>';
$b_keyword = '<strong>' . $q . '</strong>';
$final_description = str_ireplace($q, $b_description, $description);
$final_keyword = str_ireplace($q, $b_keyword, $keyword);
$display = '<div class="results" id="dbResults">
<div>
<div class="center"><span class="">Description :</span><span class="displayResult">' . $final_description . '</span></div>
<div class="right"><span class="">Keyword :</span><span class="displayResult">' . $final_keyword . '</span></div>
</div>
<hr>
</div>
</div>';
echo $display;
}
}
}
現在,讓我們說,我此行中我的DB:
id = 1
link = google.com
description = it's google
totry = 0
keywords: google, test, search
,如果我在搜索欄中鍵入:
google, test
我有正確的結果,但如果我鍵入:
test, google
我沒有結果,顯然順序是錯誤的。 所以基本上,想要達到的東西更像是「標籤」,這樣我就可以搜索正確的關鍵字而不必使用正確的順序。
我可以用我現在的代碼來做嗎(如果是的話,怎麼樣?)或者我需要改變一些東西?
在此先感謝您的任何建議。 PS:我知道這不是從數據庫中讀取數據的最佳方法,因爲它有一些安全問題,我稍後會改變它,因爲這是一個我很久以前寫的舊腳本,我更多有興趣有這個工作正常,我會改變方法後。
用這個例子,當我嘗試搜索時,我得到這個消息:'where子句'中的未知列'$ q' – Nick
@Nick現在檢查我的編輯,我用單引號就是問題 –
ok,現在消息是有點不同...如果我輸入「測試」我在'where子句'中獲得未知列'測試' – Nick