我有一个PHP代码,它运行MySQL查询,通过选择的过滤器对一些输出数据进行排序。
我遇到的问题是当我过滤超过 1 个单词时,即当我按颜色过滤时,它适用于红色、黄色等,但不适用于蓝色海军。
我以为添加'"
就足够了,但事实并非如此。
这是我当前的代码:
<?php
$colors = $con -> prepare("SELECT DISTINCT color_base1 FROM item_descr ORDER BY color_base1 ASC");
$colors ->execute();
while ($colorBoxes = $colors->fetch(PDO::FETCH_ASSOC))
{
echo "<input type='checkbox' class='regularCheckbox' name='color' value='".$colorBoxes[color_base1]."' /><font class='similarItemsText'> ".$colorBoxes[color_base1]."</font><br />";
}
?>
谢谢!
数组索引周围加上引号。
更改: $colorBoxes[color_base1]
收件人: $colorBoxes['color_base1']
积分:
printf(
"<input type='checkbox' class='regularCheckbox' name='color' value='%s' /><font class='similarItemsText'> %s</font><br />",
$colorBoxes['color_base1'],
$colorBoxes['color_base1']
);
此外,当输入name
字段中有空格时,您的表单数据可能会提交非常奇怪的内容。提交表格后尝试var_dump($_REQUEST)
以查看交易是什么,但我建议不要在color_base1
字段中使用空格。
你的SQL看起来也正确,你的代码看起来也正确,但因为你正在使用SELECT DISTINCT
这可能会导致问题,它只从两个单词中选择一个单词(它将与蓝色和海军蓝区分开来),因此还有另一种更好和推荐的方法。+ 您正在做ORDER BY
所以如果您正在使用ORDER BY
,则无需在此处进行DISTINCT
,因为它们执行相同的工作。
- 如果您使用的是
item_descr
类型ENUM
或SET
则它们将按列索引而不是列值排序。
尝试不要这样做
SELECT color_base1 FROM item_descr ORDER BY color_base1 ASC
这里演示 SQL 小提琴