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