如何将 select/dropdown 列表中的值添加到我的 Prepare 语句?

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

这里是第一个问题,但过去几天我一直在自学 PDO 以将其集成到我正在开发的网站中,但我不太确定自己做错了什么。我一直在尝试使用 GET 从下拉菜单中检索 selection,以限制查询显示的结果。

到目前为止,这是我的代码

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';
}
?>

基本上我在这里要做的是从 selection 框(在 html 中命名为 "disp")中获取值并将其添加到准备好的语句(据我了解,这是显示多少结果的上限。

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

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

但是在执行此操作后我的搜索 returns 没有结果 ("Nothing Found")。

如何让用户select查询返回的结果数?

如果这是一个常见问题,我深表歉意,并且可以向您保证我已经搜索了 google,因为我确信这是一个简单的 fix/syntax 错误,但我没有成功找到相关主题。

提前致谢。

编辑:我修改了上面的代码以反映更改,但我仍然收到 "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';
 }
}

?>