Php 带有bindValue()的PDO查询方法似乎不起作用

Php 带有bindValue()的PDO查询方法似乎不起作用,php,mysql,oop,data-binding,pdo,Php,Mysql,Oop,Data Binding,Pdo,它永远不起作用。当我对sql查询执行var转储时,我看到问号仍然在其中。这意味着这些值没有正确绑定 我不明白为什么它不约束这些值 有人能帮我吗 PHP $ruleValue = "value1"; $input = "value2"; $inputValue = "value3"; $this->_db->query('SELECT * FROM ? WHERE ? = ?', array($ruleValue, $input, $inputValue)); 方法 public

它永远不起作用。当我对sql查询执行var转储时,我看到问号仍然在其中。这意味着这些值没有正确绑定

我不明白为什么它不约束这些值

有人能帮我吗

PHP

$ruleValue = "value1";
$input = "value2";
$inputValue = "value3";

$this->_db->query('SELECT * FROM ? WHERE ? = ?', array($ruleValue, $input, $inputValue));
方法

public function query($sql, $params = array()) {
    $this->_error = false;

    if($this->_query = $this->_pdo->prepare($sql)) {
        $x = 1;
        if(count($params)) {
            foreach($params as $param) {
                $this->_query->bindValue($x, $param);
                $x++;
            }
        }

        if($this->_query->execute()) {
            $this->_results = $this->_query->fetchAll(PDO::FETCH_OBJ);
            $this->_count = $this->_query->rowCount();
        } else {
            $this->_error = true;
        }
        var_dump($this->_query);
    }

    return $this;
}
var\u dump

object(PDOStatement)#5 (1) { ["queryString"]=> string(27) "SELECT * FROM ? WHERE ? = ?" }
您的代码:

$ruleValue = "value1";
$input = "value2";
$inputValue = "value3";

$this->_db->query('SELECT * FROM ? WHERE ? = ?', array($ruleValue, $input, $inputValue)
4行
不安全
拯救国家->你为自己挖了一个巨大的陷阱
不起作用

正规PDO

$stmt = $this->db->prepare('SELECT * FROM value1 WHERE value2 = ?')
$stmt->execute([$value3]);
$results = $stmt->fetchAll();
3行
安全
无国籍 工作


结论:摆脱此恶意函数并使用原始PDO

您无法绑定表名和列名。更进一步地说:@vee
=
在这个
if($this->\u query=$this->\u pdo->prepare($sql))
if
语句中真的意味着什么吗?@陌生人,
if
语句中的
=
对我来说是OP想要减少一行代码,但它是有效的<如果成功,则返回
pdo语句
,否则返回
false
。它还可能引发异常。分配的使用与平等的使用是你的困惑,我的假设正确吗?使用
try…catch
查看
prepare
并检查
是否(!$this->query)
可能更容易阅读?@vee是的,谢谢你的澄清。你说它是恶意的,但它到底是如何恶意的?1。正如我在上面提到的,引入state后,只要尝试嵌套查询,就会遇到麻烦。类变量$stmt将被覆盖,代码将出错。2.将表名和字段名作为变量是一种灾难。