尝试选择我的类别可以是我的类别表中的所有类别

时间:2014-08-16 22:54:25

标签: php sql

我试图在我的桌面帖子中做一个选择,我的类别可以是动作,冒险,喜剧,scify。

首先我试图找出在sql中是否有类似“All”的东西用于where子句:

$where = 'ALL';
$limit = '16';
SELECT * FROM posts WHERE category = '$where' ORDER BY visits ASC LIMIT $limit

但我没有看到任何有关的信息,并且所有信息都没有明确起作用,所以我试着写下我的所有类别:

$where = 'action OR category = adventure OR category = comedy OR category= scifi';
$limit = '16';
SELECT * FROM posts WHERE category = '$where' ORDER BY visits ASC LIMIT $limit

但是它无法正常工作,因为我需要在我的类别名称中使用'',但在我的示例中我该怎么做呢?

如何在我的类别中使用引号:

$where = 'action OR category = adventure OR category = comedy OR category= scifi';

此示例的完整代码:

if($type == 'action'){
    $limit = '0,3';
    $where = "category = 'action'";
}
else if($type == 'adventure'){
    $limit = '0,5';
    $where = "category = 'adventure'";
}
else if($type == 'comedy'){
    $limit = '0,3';
    $where = "category = 'comedy'";
}
else if($type == 'scifi'){
    $where = "category = 'accao' OR category = 'adventure' OR category = 'comedy' OR category = 'scifi'";
    $limit = '16';

}

$posts=
mysql_query("SELECT * FROM posts WHERE '$where' ORDER BY visits ASC LIMIT $limit")
or die(mysql_error());

2 个答案:

答案 0 :(得分:1)

如果你是每个类别,那么就不要定义WHERE。简单。它也无法正常工作,因为你在每个值周围都缺少单引号。

如果没有定义WHERE,你就不会比较任何东西,所以每一行都会被返回。

SELECT * FROM posts ORDER BY visits ASC LIMIT $limit

另外,如果我误解你,修复你的代码:

$where = "category = 'action' OR category = 'adventure' OR category = 'comedy' OR category= 'scifi'";
$limit = '16';
$sql = "SELECT * FROM posts WHERE $where ORDER BY visits ASC LIMIT $limit";

答案 1 :(得分:0)

首先,如前所述,如果所有可能的值都正常,则为查询设置条件没有意义。

其次,我已经为您的代码添加了可能的改进:

<?php

$genres = array(
    "action" => "0,3",
    "adventure" => "0,5",
    "comedy" => "0,3",
    "scifi" => "16"
);

$type = "action";

if(!in_array($type, array_keys($genres))) {
    //handle invalid input
}

$query = sprintf("SELECT * FROM `posts` WHERE `category` = '%s' LIMIT %s", $type, $genres[$type]);
echo $query;

?>

最后请注意:不要使用mysql_*,因为它们已被弃用。查看PDO或mysqli_*。 如果您坚持使用mysql_*函数,那么您不应该使用例如{{1}}函数来逃避用户输入。 mysql_real_escape_string - 注意警告。

祝你好运!