0

皆さんに知っておいていただきたいのですが、私は 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を使用したときに過去に行っていたように、クエリから結果を取得するために使用する適切なコードでさえあるかどうかはわかりません。

ありがとう。

4

2 に答える 2

1

いいえ、そうではありません。PDO コードで 1 つのステップを見逃しています。行をフェッチしますが、フェッチしたものを見ないでください。それはもっと似ているはずです:

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

コードが記述されているので、行の結果をフェッチしますが、その行の結果を基本的な if() で使用します。データが取得された場合、$row は空でないデータになり、PHP はそれをブール値の TRUE にキャストします。つまり、「アクセスが拒否されました」というメッセージが表示されます。これは、クエリの結果のデータを見ていないため、クエリの実際の結果が「アクセス許可」と表示されていても発生します。任意のデータが返されたかどうかをテストしているだけです。

于 2013-04-17T16:35:49.507 に答える