2

我的 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 语句会通过并显示它们,但如果没有结果,则显示另一条消息。问题是当没有结果时它不会显示无结果消息。这是我的代码:

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

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

我试过像这样将 if 语句放在 while 和外部,但两种方法都行不通。我必须有 while 语句,因为我知道我会有多个结果,所以我不能使用 if 语句。while 语句需要一个 else!

4

4 回答 4

3

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

你实际上想要这个:

$category = intval($_GET['c']);
于 2013-06-03T21:54:21.473 回答
1

is_numeric返回真/假,所以您的查询是"SELECT * FROM posts WHERE category = true"

尝试这个:

if(is_numeric($_GET["c"])) {
  $category = $_GET["c"];
} else {
  // exit the script or set a default value
}
// ...
于 2013-06-03T21:55:29.600 回答
0

查询中的变量需要'像这样的额外撇号

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

还有一件事,如果您想在 PHP 中专门检测数字,请使用ctype 函数

if (ctype_alpha($id){
     //do something
}
于 2013-06-03T21:53:28.140 回答
-1

将其转换为 int!

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

接着

if (!empty($category))
{
// do your stuffff
}
于 2013-06-03T21:58:00.687 回答