Php Preparement语句回显查询结果

Php Preparement语句回显查询结果,php,pdo,prepared-statement,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 = mysq

让你们都知道,我开始学习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->fetchPDO::FETCH_ASSOC{相同的操作

fetchPDO::FETCH_ASSOC返回的值是多少?我读过这是布尔值,但我不是舒尔,如果这是用于获取查询结果的正确代码,就像我过去使用mysqli时所做的那样


谢谢。

不。没有。您的PDO代码遗漏了一个步骤。您获取了一行,但不查看获取的内容。它应该更像:

    $stm->execute(array($acess));
    $row = $stm->fetch(PDO::FETCH_ASSOC);
    if ($row['access'] == 0) {
       ...
    }

在编写代码时,您将获取一个行结果,但在基本if中使用该行结果。如果检索到数据,$row将是一些非空数据,PHP将其转换为布尔值TRUE,这意味着您将获得“访问被拒绝”消息。即使查询的实际结果表示已授予访问权限,也会发生这种情况,因为您没有查看结果da从查询中,您只是测试是否返回了任何数据。

如果您只需要access列中的数据,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,如果列访问具有此值,$result可能为0。因此,您必须与===运算符进行比较。

$COLUMNINDEX变量的值是多少?或者我只是说$COLUMNINDEX=0?这取决于结果表的顺序。例如,如果您的结果表具有id、access和foo列,则按此顺序r、 $columnIndex应该是1。好的,我明白了。谢谢你的帮助和时间!在if行上得到了未定义的索引:访问权限。完全按照你的建议做了,会是什么?可能是打字错误。我看到你的代码中有一个c。是的,就是这样!非常感谢,你让我开心: