-4

我目前正忙于在 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{
4

2 回答 2

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
}

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

于 2013-07-17T14:42:16.620 回答
-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';
}
于 2013-07-17T14:47:21.273 回答