-1

query()で列を直接フェッチする方法は?

何かのようなもの:

$userID = _openConnection()->query('SELECT id FROM users WHERE login = "' . admin
. '"', PDO::FETCH_COLUMN, 0);

それ以外の

$userID = _openConnection()->query('SELECT id FROM users WHERE login = "' . admin 
. '"')->fetchColumn();

問題は、ステートメントが何も返さない場合に fetchColumn() を呼び出すと致命的なエラーがスローされることです。これを Query() 内で実行すると、false になると思います。

ありがとう!

PS: 最初のステートメント var_dump

object(PDOStatement)#2 (1) { ["queryString"]=> string(42) "SELECT id FROM users WHERE login = "admin"" } 
4

1 に答える 1

0

あなたの PDO の使い方はかなり間違っています。

  • 単一の接続のみを作成し、それをずっと使用する必要があります
  • 準備済みステートメントを使用する必要があります
  • メソッドの連鎖には意味がありません。コードが見苦しくなります。横書きではなく縦書き。コードを短くしたい場合 -関数を作成します:

    function fetchCol()
    {
        global $pdo;
        $params = func_get_args();
        $query = array_shift($params);
        $stmt = $pdo->prepare($query);
        $stmt->execute($params);
        return $stmt->fetchColumn();
    }
    

このように使用

$pdo = _openConnection(); // do it only ONCE per application

$userID = fetchCol('SELECT id FROM users WHERE login = ?',admin); 

このアプローチにより、コアは非常に短くなりますが、意味があり、読みやすいものになります。

于 2013-05-23T19:35:20.010 に答える