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);
我正在尝试使用准备好的语句来设置占位符值,该占位符值使用作为参数传递给 __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);