类别id未接收


Category id not receiving

我目前正忙于在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.';
    }?>

它显示了这个类别的ford不存在线。我不知道出了什么问题——桌子是对的。这是桌子。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{

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

<?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
}

请注意,您必须使用准备好的语句,如上所示
您还必须设置正确的错误报告,如标签wiki

中所述

首先,由于您使用的是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';
}