0

PDO ステートメントが 1 行を返すのに、変数に代入するとデータが空になるのはなぜだろうと思っています。

私はこれを持っています:

    $stmt = $pdo->prepare("SELECT count(uid) AS total,uid FROM accounts WHERE username = ? AND pass = ?"); 
    try {
        $stmt->execute(array($temp[0],$temp[1]));
    } catch (PDOException $e) {
        echo $e -> getMessage(); exit;
    }

    $row = $stmt -> fetch();
    if(!$row['total']){
        echo json_encode(0);
    } else {            
        $_SESSION['userData'] = $stmt->fetchAll(PDO::FETCH_ASSOC);
        echo json_encode($_SESSION['userData']); 
    }

セッションをエコーすると返されます[]

fetchAll の前にフェッチを行うためですか?もしそうなら、どうすればその問題を防ぐことができますか?

4

2 に答える 2

2

このようにコードを変更できます

現在、あなたがしていることは、最初に「いいえ」をチェックすることです。PDO::Fetch()による行の取得後、その行をPDOStatement::fetchAll

より明確な以下のアプローチを適用できます

最初に行を数えますPDOStatement::rowCount()

PDOStatement::rowCount() は、DELETE、INSERT、または UPDATE ステートメントによって影響を受ける行の数を返します。

次にPDOStatement::fetch、行をフェッチするために使用します。

$sth->fetch(PDO::FETCH_ASSOC);
于 2012-11-19T04:30:51.457 に答える
0

変化する


 $row = $stmt -> fetch();


 $row = $stmt -> fetchAll(PDO::FETCH_ASSOC);

これにより、すべての行が連想配列として返されます。配列をループするだけで、結果を取得できます。

お役に立てれば。

于 2012-11-19T04:31:17.943 に答える