为新手问题道歉。
我的网站有一个表格。
<form action='' method='get'>
<select id="cSelector" name="cSelector">
<option value=""></option>
<option value="">Show All Items</option>
<option value="Compensation">Compensation</option>
</select>
<input type="submit" value="Submit">
</form>
我在表单提交时创建的查询字符串如下所示:
http://website.com/table_example.php?cSelector=Compensation
我的查询如下:
$stmt = $conn->prepare("
SELECT t1.CategoryID,t1.SubCategoryName, t1.CategoryName, t1.SubCategoryID, t2.ItemText from
(SELECT Category.CategoryID,CategoryName, SubCategoryName, SubCategoryID
FROM Category
JOIN SubCategory
ON Category.CategoryID = SubCategory.CategoryID) t1
RIGHT JOIN
(SELECT SubCategoryID, ItemText FROM Item) t2
ON (t1.SubCategoryID = t2.SubCategoryID)
WHERE 1 ".$searchQuery." AND CategoryName = ".$search2." ORDER BY ".$columnName." ".$columnSortOrder." LIMIT :limit,:offset");
预期结果生成一个由CategoryName查询的表。
我的问题。为什么要正确执行?
$search2='Compensation';
这不是吗?
$search2 = "'".$_GET['cSelector']."'";
如有任何帮助,我们将不胜感激。谢谢!
您通过GET
提交此表单
<form action='' method='get'>
您的线路通过$search2 = "'".$_POST['cSelector']."'";
使用$_POST
应该是$_GET
:
$search2 = "'" . $_GET['cSelector'] . "'";`
OP变更后
这个
$search2='Compensation';
和
$search2 = "'".$_GET['cSelector']."'";
不一样。顶部只是一个字符串值。底部是一个用引号括起来的字符串值,所以它不是Compensation
,而是'Compensation'
。
问题的核心实际上是你不确定查询是什么。如果发送的两个字符串相同,它们都会运行,但它们不是。以某种方式
真正需要的是查询的可见性。所以类似的东西
$strQuery = "SELECT t1.CategoryID,t1......";
echo "<pre>$strQuery</pre>";
$stmt = $conn->prepare($strQuery)
现在你可以看到它在做什么了。你的操作是盲目的。
两个附加注释:
- 你会从每个人那里听到,把从get或post获得的参数直接放入SQL查询是个坏主意。他们没有错
- 如果你对这些事情更详细一点,那么构建字符串总是更容易。首先获取变量,因为你无论如何都想对它进行一些处理,修剪空白,防止引号等。然后将其放入查询字符串中