2013-07-17 54 views
-4

我目前正在取得PDO论坛系统。我已经完成了索引,我现在正在与类别bussy,但以一种奇怪的方式,我没有收到类别。当我在category.php?id = 1时,它表示该类别不存在。以下代码是用于接收类别ID的部分类别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{ 
+0

你为什么要检查'$ sql || ($ result == 0)'?这将打印''这个类别不存在。'如果查询工作! –

+0

@RocketHazmat因为如果结果== 0(没有该类别的ID),那么它不存在 – jacmob

+0

但看看会发生什么,如果它*存在!如果类别退出,'$ result'将*不*等于'0','$ sql'将*不*为'FALSE'。因此你会得到'if($ sql ||($ result == 0))'。这将是'if(TRUE || FALSE)'。这是'TRUE',所以'这个类别不存在。''被打印。即使它*存在。你需要检查你的逻辑。 –

回答

-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'; 
} 
+0

谢谢!它现在正在工作。 – jacmob

+0

不客气! :-D –

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

+0

我仍然得到不存在的类别。 – jacmob

+0

或者它不存在或者有错误。 –