2017-05-31 20 views
-2

現在、PHPとPDOを使用してフォーラムを構築しようとしています。カテゴリIDのカテゴリのページに移動するリンクがありますURL(例えば、WEBSITE/category.php?id = 1)。私がそこに着くと、この$ _GET情報を使ってあなたが見ているカテゴリの名前を表示したいのですが、私のためにそれをするようには見えません。私が行くときあなたが見ることができるように、私は私がカテゴリの詳細を印刷することができPDO :: FETCH_ASSOCを使用して配列を作成し、whileループを作るしようとしてい

<?php 

include 'dbconfig.php'; 
include 'header.php'; 
$sql = "SELECT cat_id, cat_name, cat_description FROM categories WHERE cat_id = " . $_GET['id']; 
$query = $DB_con->prepare($sql); 

$query->execute(); 

$numRows = $query->fetchColumn(); 

if (!$query) { 
    echo 'Something went wrong whilst getting the category from the database.'; 
} else { 
    if ($numRows == 0) { 
     echo 'Sorry, this category does not exist'; 
    } else { 
     while($catRow = $query->fetch(PDO::FETCH_ASSOC)){ 
      echo $catRow['cat_name']; 
     } 
    } 
} 

include 'footer.php'; 
?> 

を、しかし:ここ は、私が持っているものですページにはheader.phpとfooter.phpを除いて何も表示されません。出てくるエラーもありません。誰か私が間違っているのを見ることができますか?または、私が残した情報があれば教えてください。ありがとう。

+3

あなたのコードはSQLインジェクションの影響を受けやすいので、これを修正する必要があります。 – Enstage

+0

@Enstageどのように?私はSQLインジェクションはPDOを使用すると不可能でしたが? –

+1

@CalCourtney本質的にではありません。それでもパラメータをバインドする必要があります。 –

答えて

2

問題は$numRowsです。PDOStatement :: fetchColumnは、結果セット内の行を数えません。そのためにPDOStatement :: rowCountがあります。

SQLインジェクションに関しては、それを保存するクラスや関数ではなく、関数を使用する方法です。それはhereを行くについての詳細を読むには私達はちょうど私達にこのような何か与えるあなたのコードに学んだことを適用する

(リンクは私のための関連でトップリンクであった):

$sql = "SELECT cat_id, cat_name, cat_description FROM categories WHERE cat_id = :id"; // Parameterize query to prevent sql injection 
$query = $DB_con->prepare($sql); 

$query->execute([":id" => $_GET['id']]); // Binding parameter(s), could also be done using bindParam 
$results = $query->fetchAll(PDO::FETCH_ASSOC); // For later use 
$numRows = $query->rowCount(); 

if ($query->errorCode() == "00000") { // I don't think that PDOStatement ever fails to be created, so $query would never not be set 
    echo 'Something went wrong whilst getting the category from the database.'; 
} else { 
    if ($numRows == 0) { 
     echo 'Sorry, this category does not exist'; 
    } else { 
     foreach ($results as $category){ 
      echo $category['cat_name']; 
     } 
    } 
} 

注意をそのようにIバインドしてください(実行中の)私の好みの方法ではなく、最も良い方法です。

+0

'$ id =(int)$ _GET ['id'];' sufficed 。 –

関連する問題