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

时间:2015-03-04 05:25:36

标签: php sql pdo prepared-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中命名为&#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())语句中,因为我希望用户能够通过任何字段进行搜索而不是填写所有字段。

1 个答案:

答案 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';
 }
}

?>