PHP - PDO 准备语句,"Warning: PDOStatement::bindParam() expects at least 2 parameters"

PHP - PDO Prepared statment, "Warning: PDOStatement::bindParam() expects at least 2 parameters"

我正在尝试使用准备好的语句来设置占位符值,该占位符值使用作为参数传递给 __construct 函数的 class 对象 属性。但是,当我只有一个占位符值参数时,我接缝会收到一个错误,指定需要 2 个参数。

代码:

<?php include ('connection.inc.php');

class Team {

    // Remember to switch back to private!
    private $database;
    public $statement = 'SELECT * FROM members ORDER BY :full_name';
    public $order;
    public $query;

    private $result;    

    public function __construct($database, $order) {
        $this->database = $database;
        $this->order = $order;
        $this->query = $this->database->prepare($this->statement);
        $this->query->bindParam(array('full_name', $this->order));
        $this->query->execute();                
    }

    public function getMember() {        
        $this->result = $this->query->fetch(PDO::FETCH_ASSOC);
        return $this->result;                        
    }
    public function id() {
        echo $this->result['id'];
    }

    public function fullName() {
        echo $this->result['full_name'];
    }
    public function alias() {
        echo $this->result['alias'];
    }
    public function abilities() {
        echo $this->result['abilities'];
    }    

};

$test = new Team($database, 'full_name');

?>

错误:

警告:PDOStatement::bindParam() 需要至少 2 个参数,其中 1 个在

中给出

致命错误:未捕获异常 'PDOException' 消息 'SQLSTATE[HY093]: Invalid parameter number: no parameters were bound'

解决方案

感谢@Daerik,我将 bindParam() 语句更改为:

$this->query->bindParam(':full_name', $this->order));

这消除了错误。

PDOStatement::bindParam ( mixed $parameter , mixed &$variable )

$parameter:参数标识符。对于使用命名占位符的准备好的语句,这将是 :name 形式的参数名称。对于使用问号占位符的预准备语句,这将是参数的 1 索引位置。

$variable:要绑定到 SQL 语句参数的 PHP 变量的名称。

您将要使用:

$this->query->bindParam(':full_name', $this->order);

有关详细信息,请阅读 PDOStatement::bindParam

不要使用bindParam()传递多个参数,只需使用:

$this->query->execute(array(':full_name' => $this->order));

注意:需要在参数名中包含:并且需要传递':key' => $value

或者只有一个,不要传递数组,bindParam() 需要两个参数:

$this->query->bindParam(':full_name', $this->order);