类别ID未收到

时间:2013-07-17 14:31:33

标签: php pdo

我目前忙于在PDO中获取论坛系统。我已经完成了索引,我现在忙于该类别,但在一个奇怪的方式我没有收到类别。当我在category.php?id = 1时,它表示该类别不存在。以下代码是接收类别ID

的部分
  <?php
  $sql = $db->query("SELECT
                cat_id,
                cat_name,
                cat_description
            FROM
                categories
            WHERE
                cat_id = " . $_GET['id']);

$result = $sql->rowCount();

if(!$result)
{
    echo 'The category could not be displayed, please try again later.';
}
else
{
    if($sql || ($result== 0))
    {
        echo 'This category does not exist.';
    }?>

它显示此类别不存在行。我不知道表格的错误是什么。这是表。 http://sqlfiddle.com/#!2/8d1c4

我是PDO的初学者所以也许这只是一个简单的错误,因为我不知道。

对于那些想知道答案是什么的人。这是我现在使用的脚本:

    <?php
//first select the category based on $_GET['cat_id']
$sql = $db->prepare('SELECT cat_id, cat_name, cat_description
    FROM categories WHERE cat_id = :catid');
$sql->bindParam(':catid', $_GET['id'], PDO::PARAM_INT); 
$sql->execute();
$result = $sql->rowCount();


if($result === FALSE){
    echo 'The category could not be displayed, please try again later.';
}
elseif(count($result) === 0){
    echo 'This category does not exist.';
}
else{

2 个答案:

答案 0 :(得分:0)

使用行计数有什么意义?
如果您需要一个类别 - 为什么不提取它

<?php
$sql = "SELECT cat_id, cat_name, cat_description FROM categories  WHERE cat_id = ?";
$stm = $db->prepare($sql);
$stm->execute(array($_GET['id']));
$row = $stm->fetch();
if (!$row) {
    // no category found
}

请注意,您必须使用预备语句,如上所示 您还必须按照tag wiki

中的说明设置正确的错误报告

答案 1 :(得分:-1)

首先,由于您使用的是PDO,因此使用准备好的查询。这真的很容易。

$sql = $db->prepare('SELECT cat_id, cat_name, cat_description
    FROM categories WHERE cat_id = :catid');
$sql->execute(array(':catid' => $_GET['id']));

这将为您解决任何问题,并保证您不会受到SQL注入。接下来,您需要从刚刚运行的SQL查询中获取数据:

$result = $sql->fetchAll(PDO::FETCH_ASSOC);

最后,您可以检查类别是否存在。

if($result === FALSE){
    echo 'The category could not be displayed, please try again later.';
}
elseif(count($result) === 0){
    echo 'This category does not exist.';
}
else{
    echo 'Category found';
}