-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

-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 に答える