我有這樣的形式來獲取用戶輸入:包括<SELECT>在搜索領域的查詢
<form method="post" action="do_search.php">
<select name="stat">
<option value="-">No StatTrak</option>
<option value="ST">StatTrak</option>
</select>
<input type="text" name="search" id="search_box" class="search_box" placeholder="Bayonet/Blue Steel (Factory New)"></br>
<input type="submit" value="Find item!" class="search_button" /><br />
</form>
的查詢工作,並搜索匹配第二列(ITEMNAME)。現在我想讓選擇框通過使用第一列過濾出結果。
第一列只包含「ST」或「 - 」。
這裏是我的查詢:
$search=$_POST['search'];
$stat=$_POST['stat'];
$query = $pdo->prepare("SELECT itemname, itemprice, itemupdate, itemstat FROM pricedata WHERE itemname Like ? ORDER BY itemprice DESC LIMIT 15");
$query->bindValue(1, "%$search%", PDO::PARAM_STR);
$query->execute();
基本上,我需要這樣的東西:
...FROM pricedata where itemname LIKE $Searchbox AND itemstat LIKE $Selectbox...
我新的PHP和我使用一些教程做此查詢。我理解它的大部分內容,但我不明白這些價值是如何「準備好」的。
這部分是很難理解我:
$query->bindValue(1, "%$search%", PDO::PARAM_STR);
會是什麼使選擇框給查詢一個額外的變量正確的方法,所以它只能說明匹配的搜索框和有結果第一列中的「ST」或「 - 」。
在此先感謝,我感謝任何幫助! :)
對於Dimlucas:
$query = $pdo->prepare("SELECT itemname, itemprice, itemupdate, itemstat FROM pricedata WHERE itemname Like ? AND itemstat=? ORDER BY itemprice DESC LIMIT 15");
$query->bindValue(1, "%$search%", PDO::PARAM_STR);
$query->bindValue(2, $stat);
$query->execute();
這個查詢(您發佈的第一個只是說「沒什麼發現「,但它會做正確的事情,如果它工作的話,因爲它包括用戶輸入(選擇框和搜索欄)
SELECT itemname, itemprice, itemupdate, itemstat FROM pricedata WHERE itemname Like 'Karambit' AND itemstat='ST' ORDER BY itemprice DESC LIMIT 15
我用這個替換了第一個測試,如果有任何問題找到正確的匹配。它找到了正確的匹配,但是這個不包含任何佔位符或用戶輸入,所以我猜,在接受用戶輸入並將其提供給查詢使用之間存在一個問題。
現在我有這樣的查詢和打印出來的結果 - >http://pastebin.com/xMf4jCgH
我嘗試添加$搜索和$統計在面前的桌子上。它打印出搜索字符串,但不是「 - 」或「ST」,它是來自選擇框的輸入。所以問題是,用戶輸入甚至沒有達到查詢。
你有什麼想法嗎?
井代碼'where itemname LIKE $搜索框和itemstat LIKE $選擇框'它看起來不錯。試驗是最好的學習方式 – RiggsFolly
你可以編寫任意數量的'$ query-> bindValue()'so'$ query-> bindValue(2,「%$ select%」,PDO :: PARAM_STR);' – RiggsFolly
謝謝! PDO :: PARAM_STR是做什麼的?該查詢如何知道,哪個數字是「?」。它是否按升序排列? bindvalue(1是否意味着它是查詢和綁定值中的第一個「?」(2是第二個? –