只是为了你们所有人都知道,我开始学习PDO所以不要生我的气。:)
当我使用mysqli时,我会这样做,从查询中得到结果并回显一下:
$query2= "SELECT acess FROM statistic WHERE id_page IN(SELECT id FROM page WHERE title='".$registos1['title']."')";
$result2 = mysqli_query($ligaBD,$query2);
$registos2 = mysqli_fetch_array($result2);
if($registos2['acess']==0){
echo '<head><meta http-equiv="Content-Type" content="text/html; charset=utf-8" /><title>...</title></head><body>This page is private.</body></html>';exit;
现在我试图在PDO上做这件事,但如果是这样的话我就不会这样做了:
$sql = "SELECT acess FROM statistic WHERE id_page IN(SELECT id FROM page WHERE title=?)";
$stm = $ligaBD->prepare($sql);
$stm->execute(array($acess));
$stm->fetchColumn();
if(($row = $stm->fetch(PDO::FETCH_ASSOC))){
echo '<head><meta http-equiv="Content-Type" content="text/html; charset=utf-8" /><title>Easy Page Builder</title></head><body>This page is private.</body></html>';exit;
}
此if($registos2['acess']==0){
与此if(($row = $stm->fetch(PDO::FETCH_ASSOC))){
完全相同?
fetch(PDO :: FETCH_ASSOC)返回的值是多少?我已经读过布尔值,但是如果这是用于从查询中获取结果的正确代码,就像我过去在使用mysqli时所做的那样,我就不是shure。
感谢。
答案 0 :(得分:1)
没有。它没有。您错过了PDO代码中的一个步骤。你获取一行,但不要看你拿走了什么。它应该更像是:
$stm->execute(array($acess));
$row = $stm->fetch(PDO::FETCH_ASSOC);
if ($row['access'] == 0) {
...
}
在编写代码时,您获取行结果,但在基本if()中使用该行结果。如果检索到数据,$ row将是一些非空数据,并且PHP将其转换为布尔值TRUE,这意味着您将获得“拒绝访问”消息。即使查询的实际结果显示“已授予访问权限”,因为您没有查看查询中的结果数据,也会发生这种情况,您只是在测试是否所有数据都被返回。
答案 1 :(得分:0)
如果您只需要访问列中的数据,fetchColumn()
就足够了。
/* The $columnIndex is the zero-based index of the `access` column */
$sql = "SELECT acess FROM statistic WHERE id_page IN(SELECT id FROM page WHERE title=?)";
$stm = $ligaBD->prepare($sql);
$stm->execute(array($acess));
$result = $stm->fetchColumn($columnIndex);
if($resut === 0){
echo '<head><meta http-equiv="Content-Type" content="text/html; charset=utf-8" /><title>Easy Page Builder</title></head><body>This page is private.</body></html>';exit;
}
如果列$result
具有此值,则FALSE
如果没有返回行,则0
可以是access
。因此,您必须与===
运算符进行比较。