我正在尝试使用预准备语句使用类对象属性设置占位符值,该属性作为参数传递给__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));
这删除了错误。
答案 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);