PHP - PDO准备好的语句,“警告:PDOStatement :: bindParam()需要至少2个参数”

时间:2016-12-15 17:59:46

标签: php pdo prepared-statement execute bindparam

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

CODE:

<?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]:参数号无效:没有参数被绑定'

解决方案

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

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

这删除了错误。

2 个答案:

答案 0 :(得分:1)

  

PDOStatement :: bindParam(混合$参数,混合&amp; $变量)

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

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

您想要使用:

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

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

答案 1 :(得分:1)

请勿使用bindParam()传递多个参数,只需使用:

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

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

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

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