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);
    }
}

如果我将登录的行选择更改为变量,则代码返回 bool false

    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. 标识符必须被格式化列入白名单,而不是参数化。您可以在标签 wiki 中查看示例。
  4. 使用不同的行选择及其值执行 3 个完全相同的查询的最佳方法是运行一个查询,将所有条件设置到其中。
于 2013-03-01T11:25:16.663 回答