这里的第一个问题,但我过去几天一直在教自己PDO融入我正在开发的网站,而且我不太确定我做错了什么。我一直在尝试使用GET从下拉菜单中检索选择,以限制查询显示的结果。
到目前为止,这是我的代码
HTML:
<form action="searchfx.php" method="get">
<p>Provider Name: <input type="text" name="name" /></p>
<p>Provider Number: <input type="text" name="prvdrnum" /></p>
<p>Number of results to display:</p> <select name="disp" size="1">
<option name="10" value="10">10</option>
<option name="25"value="25">25</option>
<option name="50" value="50">50</option>
</select>
<p><input type="submit" /></p>
</form>
PHP:
<?php
include("link.php");
$name=$_GET['name'];
$num=$_GET['prvdrnum'];
if(isset($_GET['disp']){
$disp=$_GET['disp'];
}
$query = $link->prepare("SELECT *
FROM hcisip
WHERE providerName LIKE '%$name%'
AND providerNum LIKE '%$num%'
LIMIT 0, $disp");
//<------The 50 is what I am trying to change to have the $disp selection
$query -> bindValue(':name', $name, PDO::PARAM_STR);
$query -> bindValue(':num', $num, PDO::PARAM_STR);
$query -> bindValue(':disp', $disp, PDO::PARAM_INT);
$query->execute();
// Display search result
if (!$query->rowCount() == 0) {
echo "Search found :<br/>";
echo "<table>";
echo "<tr><td>Provider Name</td><td>Provider Number</td></tr>";
while ($results = $query->fetch()) {
echo "<tr><td>";
echo $results['providerName'];
echo "</td><td>";
echo $results['providerNum'];
echo "</td></tr>";
echo "</table>";
}
} else {
echo 'Nothing found';
}
?>
基本上我在这里尝试做的是从选择框中取值(在html中命名为&#34; disp&#34;)并将其添加到预准备语句的第二个参数(我的理解是显示结果数量的上限。
到目前为止,我尝试添加$ disp = $ _ GET [&#39; disp&#39;];到顶部,然后将准备好的声明更改为:
$ query = $ link-&gt; prepare(&#34; SELECT * FROM hcisip WHERE providerName LIKE&#39;%$ name%&#39; AND providerNum LIKE&#39;%$ num%&#39; LIMIT 0,&#39;%$ disp%&#39;&#34;);
但是在执行此操作时,我的搜索没有返回任何结果(&#34; Nothing Found&#34;)。
如何让用户选择查询返回的结果数?
我很抱歉,如果这是一个常见的问题并且可以向你保证我搜索谷歌,因为我确定这是一个简单的修复/语法错误,但我没有成功找到相关主题。
提前致谢。
编辑:我修改了上面的代码以反映更改但仍在接受&#34;没有找到&#34;这意味着:disp没有发挥作用。
我也收到此错误:PDOStatement :: execute():SQLSTATE [HY093]:参数号无效:绑定变量数与令牌数不匹配
编辑:它现在正在工作,我编辑了上面的代码以反映我的更改。我选择不将整个块包含在if(isset())语句中,因为我希望用户能够通过任何字段进行搜索而不是填写所有字段。答案 0 :(得分:1)
首先,您必须检查$ _GET中的值是否存在:
编辑:
<?
include("link.php");
if(isset($_GET['disp']) && isset($_GET['name']) && isset($_GET['prvdrnum'])) {
$disp=$_GET['disp'];
$name=$_GET['name'];
$num=$_GET['prvdrnum'];
$query = $link->prepare("SELECT * FROM hcisip WHERE providerName LIKE '%$name%' AND providerNum LIKE '%$num%' LIMIT 0, $disp");
$query->execute();
// Display search result
if ($query->rowCount() > 0) {
echo "Search found :<br/>";
echo "<table>";
echo "<tr><td>Provider Name</td><td>Provider Number</td></tr>";
while ($results = $query->fetch()) {
echo "<tr><td>";
echo $results['providerName'];
echo "</td><td>";
echo $results['providerNum'];
echo "</td></tr>";
echo "</table>";
}
} else {
echo 'Nothing found';
}
}
?>