如何将选择/下拉列表中的值添加到我的准备语句中


How add a value from select/dropdown list to my Prepare Statement?

这里的第一个问题,但在过去的几天里,我一直在自学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中命名为"disp"),并将其添加到准备好的语句的第二个参数中(据我所知,这是显示多少结果的上限。

到目前为止,我已经尝试添加$disp=$_GET['disp'];到顶部,然后将准备好的语句更改为:

$query=$link->prepare("SELECT*FROM hcisip WHERE providerName LIKE'%$name%'AND providerNum LIKE'%$num%'LIMIT 0,'%$disp%'");

但这样做后,我的搜索没有返回任何结果("NothingFound")。

如何允许用户选择查询返回的结果数?

如果这是一个常见的问题,我很抱歉,我可以向你保证,我搜索了谷歌,因为我确信这是一次简单的修复/语法错误,但我没有成功找到相关的主题。

提前谢谢。

编辑:我已经修改了上面的代码以反映更改,但仍然收到"Nothing found",这意味着:disp没有做好它的工作。

我也收到了这个错误:PDOStatement::execute():SQLSTATE[HY093]:无效的参数编号:绑定变量的数量与令牌的数量不匹配

编辑:它现在工作了,我已经编辑了上面的代码来反映我的更改。我选择不在if(isset())语句中包含整个块,因为我希望用户能够按任何字段进行搜索,而不是全部填写。

首先必须检查$_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';
 }
}
?>