如何将 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';
}
}
?>
这里是第一个问题,但过去几天我一直在自学 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';
}
}
?>