SQL无法正常使用用户自定义的变量

时间:2013-06-03 21:52:07

标签: php mysql

我的MySQL结果遇到问题,我有一个名为“posts”的表,一列名为“category”,这是一个整数值。我创建了一个变量来从浏览器中获取类别编号,具体取决于用户点击的类别链接。

如果类别编号为“1”,则应显示测试帖(确实如此)。 但是,如果类别编号不是“1”(类别ID),它仍然会显示相同的测试帖,因为它应该说“找不到结果”,因为它正在查询不同的类别ID编号。

我猜它与SQL语法有关,因为我已经在变量名称周围添加了单引号,并且它出错了所以我删除了它们。我只在下面发布必要的代码,因为我知道它与SQL中的变量有关:

// Variable to hold number
$category = is_numeric($_GET["c"]);

// Query
$query = "SELECT * FROM posts WHERE category = $category";

注意:现在我遇到了另一个问题。我需要这样做,当有结果时,while语句会通过并显示它们,但是如果没有结果,则显示另一条消息。问题是,当没有结果时,它不会显示 no results 消息。这是我的代码:

while($results = mysqli_fetch_assoc($query))
{
    echo '$results["title"] <br>';
}

if(count($results) == 0 || count($results) == null) {echo 'No results';}

我已经尝试将if语句放在while和outside之外,但两种方式都不行。我必须有while语句因为我知道我将有多个结果所以我不能使用if语句。 while语句需要另外一个!

4 个答案:

答案 0 :(得分:3)

您正在将类别转换为布尔值。

你真的想要这个:

$category = intval($_GET['c']);

答案 1 :(得分:1)

is_numeric返回true / false,因此您的查询为"SELECT * FROM posts WHERE category = true"

试试这个:

if(is_numeric($_GET["c"])) {
  $category = $_GET["c"];
} else {
  // exit the script or set a default value
}
// ...

答案 2 :(得分:0)

您的查询中的变量需要额外的'撇号,如此

$query = "SELECT * FROM posts WHERE category = '$category'";

还有一件事,如果你试图在PHP中专门检测数字,请使用ctype  功能

if (ctype_alpha($id){
     //do something
}

答案 3 :(得分:-1)

把它投到int!

$category = (int) $_GET["c"];

然后

if (!empty($category))
{
// do your stuffff
}