如何在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”这是堆栈溢出让我的代码搞砸了。我正在努力将代码放入代码区域。实际上它看起来像这样。
答案 0 :(得分:1)
$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调用上出现问题,就会给出明确的错误消息。