1

我有一个运行 MySQL 查询的 PHP 代码,以通过选择的过滤器对一些输出数据进行排序。

我遇到的问题是当我过滤超过 1 个单词时,即当我按颜色过滤时,它适用于 RED、YELLOW 等。但不适用于 BLUE NAVY。

我认为添加就足够了,'"但事实并非如此。

这是我当前的代码:

 <?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 />";
}
?>

谢谢!

4

2 回答 2

0

您需要在数组索引周围加上引号。

改变:$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字段中使用空格。

于 2012-12-18T17:07:50.603 回答
0

您的 sql 看起来正确,您的代码看起来也正确,但是由于您正在使用SELECT DISTINCT 这可能会导致问题,并且它仅从两个单词中选择一个单词(它将与蓝色和海军不同),因此还有另一种更好和推荐的方法。+如果您正在使用,则ORDER BY不需要在这里这样做,因为它们做同样的工作。DISTINCTORDER BY

  • 如果您使用的是item_descr类型ENUMSET那么它们将按列索引而不是列值排序。

尝试这样做

SELECT color_base1 FROM item_descr ORDER BY color_base1 ASC   

这里DEMO SQL FIDDLE

于 2012-12-18T19:47:03.130 回答