PHP MySQL使用QueryString调整查询



为新手问题道歉。

我的网站有一个表格。

<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)

现在你可以看到它在做什么了。你的操作是盲目的。

两个附加注释:

  1. 你会从每个人那里听到,把从get或post获得的参数直接放入SQL查询是个坏主意。他们没有错
  2. 如果你对这些事情更详细一点,那么构建字符串总是更容易。首先获取变量,因为你无论如何都想对它进行一些处理,修剪空白,防止引号等。然后将其放入查询字符串中

最新更新