PHP绑定值

时间:2016-03-01 09:44:39

标签: php pdo bindvalue

我遇到了绑定多个值的问题。我已经尝试了一个值,它运行正常。我错过了什么?

当我运行Query时,它给出了一个错误: 警告:PDOStatement :: execute():SQLSTATE [HY093]:参数号无效:绑定变量数与第35行中C:\ xampp \ htdocs \ Media \ admin \ dashboard \ classes \ DB.php中的标记数不匹配

private function runQuery($sql, $bind_value = array()) {
    $this->_error = false;
    if($ms = $this->_query = $this->_pdo->prepare($sql)) {
        $this->_query->bindValue($x, $bind_values);
        if($this->_query->execute()) { //**ERROR FOUND HERE**
            echo 'ok';
        }
        die();
    }
}

public function get($column, $table, $where = array()) {
    if($where) {
        if(count($where) === 3) {
            $operators = array(
                '=',
                '<',
                '>',
                '>=',
                '<='
            );

            $field      = $where[0];
            $operator   = $where[1];
            $value      = $where[2];

            $bind_value = array(
                $column,
                $table,
                $field,
                $operator,
                $value,
            );
            if(in_array($operator, $operators)) {
                $sql = "SELECT ? ? WHERE ? ? ?";
                return $this->runQuery($sql, $bind_value);
            }
        } else {
            echo 'problem';
        }
    }
}

1 个答案:

答案 0 :(得分:0)

你几乎违反了OOP的每一条规则。你班上不应该有像_query这样的变量。

你真正需要的只是这五行:

public function runQuery($sql, $bind_value = array()) {
    $stmt = $this->_pdo->prepare($sql);
    $stmt->execute($bind_value);
    return $stmt;
}

必须返回语句,而不是将其设置为类变量。

get()函数也没用,错了,你最好避免它。如果你真的想要一个自动化选择查询的函数,你必须查看现有的查询构建器,比如AuraSQL。