1

これが機能する理由

    class xyz{
    private $_db;
            function __construct(){

        //database connection 
    }

    function abc($login,$pass,$email){
        $l = "login";
        $check = $this->_db->prepare("SELECT userid FROM users WHERE login = ?");
        $check->execute(array($login));
        $res1 = $check->fetch(PDO::FETCH_NUM);
        return var_dump($res1);
    }
}

そして、ログイン用の行選択を変数に変更すると、コードはboolfalseを返します

    class xyz{
    private $_db;
    function __construct(){

        //database connection 
    }

    function abc($login,$pass,$email){
        $l = "login";
        $check = $this->_db->prepare("SELECT userid FROM users WHERE ? = ?");
        $check->execute(array($l,$login));<<<<<-----THIS $l FAILS TO WORK
        $res1 = $check->fetch(PDO::FETCH_NUM);
        return var_dump($res1);
    }
}

行の選択とその値が異なる3つのまったく同じクエリを実行するための最良の方法は何ですか?

4

2 に答える 2

2

プリペアドステートメントの列名をパラメータ化することはできません:http://us3.php.net/manual/en/book.pdo.php#69304

さらにここで:PDOプリペアドステートメントでパラメータ化できるトークンはどれですか?

于 2013-03-01T11:23:37.507 に答える
1
  1. 質問する前にタグウィキ読んでください。
  2. 特に、「プレースホルダーはクエリの任意の部分を表すことはできませんが、完全なデータリテラルのみを表すことができます」と言われています。
  3. 識別子は、パラメーター化ではなく、フォーマットしてホワイトリストに登録する必要があります。タグウィキで例を見ることができます。
  4. 異なる行選択とその値を使用して3つのまったく同じクエリを実行する最良の方法は、1つのクエリを実行し、それにすべての条件を設定することです。
于 2013-03-01T11:25:16.663 に答える