Php Preparement语句回显查询结果

时间:2013-04-17 16:33:42

标签: php pdo prepared-statement

只是为了你们所有人都知道,我开始学习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。

感谢。

2 个答案:

答案 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。因此,您必须与===运算符进行比较。