我有这样的形式来获取用户输入:包括<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是第二个? –