如何在if语句中放置PDO bindParam?

时间:2014-01-28 13:44:46

标签: php if-statement pdo

如何在if语句中放置PDO bindParam?我尝试做了不同的变化,但没有一个有效。

function get_all_pages($subject_id, $public = true)
    {
    $db = new PDO('mysql:host=localhost;dbname=name;charset=utf8', 'root', 'whatewer');
    $query = "SELECT * ";
    $query.= "FROM pages ";
    $query.= "WHERE subject_id =:id ";
    if ($public)
        {
        $query.= " AND visible =:visible ";
        }

    $query.= "ORDER BY position ASC";
    $query.= "ORDER BY position ASC";
    $stmt = $db->prepare($query);
    if ($public)
        {
        $stmt->bindParam(':id', $subject_id, PDO::PARAM_INT);
        $stmt->bindValue(':visile', 2, PDO::PARAM_INT);
        }
      else
        {
        $stmt->bindParam(':id', $subject_id, PDO::PARAM_INT);
        }

    $stmt->execute();
    $affected_rows = $stmt->rowCount();
    if ($affected_rows == 1)
        {
        $subject = $stmt->fetch(PDO::FETCH_ASSOC);
        return $subject;
        }
    }
  else
    {
    return null;
    }
}

好吧有误解我得到了我的鳕鱼“Wright”这是堆栈溢出让我的代码搞砸了。我正在努力将代码放入代码区域。实际上它看起来像这样。

http://imagizer.imageshack.us/v2/800x600q90/593/zvf8.png

1 个答案:

答案 0 :(得分:1)

根据{{​​3}}:

$affected_rows = $stmt->rowCount();可能会给您带来意想不到的结果

  

对于大多数数据库,PDOStatement :: rowCount()不返回   受SELECT语句影响的行数。

您应该直接获取一行并查看结果:

$stmt->execute();
if ($subject = $stmt->fetch(PDO::FETCH_ASSOC))
{
    return $subject;
}
else
{
    return null;
}

我建议按照我在评论中提到的那样打开你的数据库连接:

$db = new PDO('mysql:host=localhost;dbname=name;charset=utf8', 'root',
              'whatewer', array(PDO::ATTR_ERRMODE => PDO::ERRMODE_WARNING));

这将导致PDO抛出异常,并且只要在任何db调用上出现问题,就会给出明确的错误消息。