我试图在我的桌面帖子中做一个选择,我的类别可以是动作,冒险,喜剧,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());
答案 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 - 注意警告。