我真的不知道为什么即使在绑定参数
之后我也有这个错误 SQLSTATE[HY093]: Invalid parameter number: no parameters were bound
这是我的功能
public function get_no_records($param){
$query = "SELECT * FROM users_tbl WHERE username = :value";
$this->query = $query;
$stmt = $this->db->prepare($query);
$stmt->bindParam(':value',$param);
$stmt->execute();
$row_num = $stmt->rowCount();
if($row_num > 0){
$this->total_rec = $row_num;
return $row_num;
}
}
该函数是分页类的一部分。这是类
<?php
class Paginator{
private $db;
public $page_no;//current page
public $limit;//record_per page
public $row_start;
public $total_rec;
public $query;
function __construct($con){
$this->db = $con;
}
//get total no of records
public function get_no_records($param){
$query = "SELECT * FROM users_tbl WHERE username = :value";
$this->query = $query;
$stmt = $this->db->prepare($query);
$stmt->bindParam(':value',$param);
$stmt->execute();
$row_num = $stmt->rowCount();
if($row_num > 0){
$this->total_rec = $row_num;
return $row_num;
}
}
public function get_data($limit,$page_no){
try {
$this->limit = $limit;
$this->page_no = $page_no;
if($this->limit == "all"){
$query = $this->query;
}
else{
$this->row_start = (($this->page_no-1) * $this->limit);
$query = $this->query . " LIMIT ". $this->row_start . "," . $this->limit;
}
$stmt = $this->db->prepare($query);
$stmt->execute();
while($row = $stmt->fetch(PDO::FETCH_ASSOC)){
//create an array to hold record
$results[] = $row;
}
$result = new stdClass();
$result->page_no = $this->page_no;
$result->limit = $this->limit;
$result->total_rec = $this->total_rec;
$result->data = $results;
return $result;
} catch (PDOException $e) {
echo $e->getMessage();
}
}
public function create_links($links,$list_class){
if($this->limit == 'all'){
return '';
}
$last = ceil($this->total_rec/$this->limit);
$start = (($this->page_no - $links) > 0) ? $this->page_no - $links : 1;
$end = (($this->page_no + $links) < $last) ? $this->page_no + $links : $last;
$html = '<ul class="' . $list_class . '">';
$class = ($this->page_no == 1) ? "disabled" : "";
$previous_page = ($this->page_no == 1) ?
'<a href= ""><li class="' . $class . '">«</a></li>' :
'<li class="' . $class . '"><a href="?limit=' . $this->limit . '&page_no=' . ($this->page_no-1) . '">«</a></li>';
$html .= $previous_page;
if($start > 1){
$html .= '<li><a href="?limit=' . $this->limit . '&page_no=1">1</a></li>';
$html .= '<li class="disabled"><span>....</span></li>';
}
for($i = $start;$i<=$end;$i++){
$class = ($this->page_no == $i)? "active" : "";
$html .= '<li class="' . $class . '"><a href="?limit=' . $this->limit . '&page_no=' . $i .'">' . $i . '</a></li>';
}
if( $end < $last){
$html .= '<li class="disabled"><span>....</span></li>';
$html .= '<li><a href="?limit=' . $this->limit . '&page_no=' . $last . '">' . $last . '</a></li>';
}
$class = ($this->page_no == $last)? "disabled" : "";
$next_page = ( $this->page_no == $last)?
'<li class="' . $class . '"><a href="">»</a></li>':
'<li class="' . $class . '"><a href="?limit=' . $this->limit . '&page_no=' . ($this->page_no + 1) . '">»</a></li>';
$html .= $next_page;
$html .= '</ul>';
return $html;
}
} ?&GT;
答案 0 :(得分:1)
谢谢大家。我得到了错误的来源,它的get_data(),因为该函数还包含一个查询,一个值也必须绑定。这是我的新代码。
<?php
class Paginator{
private $db;
public $page_no;//current page
public $limit;//record_per page
public $row_start;
public $total_rec;
public $query;
function __construct($con){
$this->db = $con;
}
//get total no of records
public function get_no_records($query,$value){
$this->query = $query;
$stmt = $this->db->prepare($query);
$stmt->bindParam(':value',$value);
$stmt->execute();
$row_num = $stmt->rowCount();
if($row_num > 0){
$this->total_rec = $row_num;
return $row_num;
}
}
public function get_data($limit,$page_no,$value){
try {
$this->limit = $limit;
$this->page_no = $page_no;
if($this->limit == "all"){
$query = $this->query;
}
else{
$this->row_start = (($this->page_no-1) * $this->limit);
$query = $this->query . " LIMIT ". $this->row_start . "," . $this->limit;
}
$stmt = $this->db->prepare($query);
$stmt->bindParam('value',$value);
$stmt->execute();
while($row = $stmt->fetch(PDO::FETCH_ASSOC)){
//create an array to hold record
$results[] = $row;
}
if(empty($results)){
return;
}
$result = new stdClass();
$result->page_no = $this->page_no;
$result->limit = $this->limit;
$result->total_rec = $this->total_rec;
$result->data = $results;
return $result;
} catch (PDOException $e) {
echo $e->getMessage();
}
}
public function create_links($links,$list_class){
if($this->limit == 'all'){
return '';
}
$last = ceil($this->total_rec/$this->limit);
$start = (($this->page_no - $links) > 0) ? $this->page_no - $links : 1;
$end = (($this->page_no + $links) < $last) ? $this->page_no + $links : $last;
$html = '<ul class="' . $list_class . '">';
$class = ($this->page_no == 1) ? "disabled" : "";
$previous_page = ($this->page_no == 1) ?
'<a href= ""><li class="' . $class . '">«</a></li>' :
'<li class="' . $class . '"><a href="?limit=' . $this->limit . '&page_no=' . ($this->page_no-1) . '">«</a></li>';
$html .= $previous_page;
if($start > 1){
$html .= '<li><a href="?limit=' . $this->limit . '&page_no=1">1</a></li>';
$html .= '<li class="disabled"><span>....</span></li>';
}
for($i = $start;$i<=$end;$i++){
$class = ($this->page_no == $i)? "active" : "";
$html .= '<li class="' . $class . '"><a href="?limit=' . $this->limit . '&page_no=' . $i .'">' . $i . '</a></li>';
}
if( $end < $last){
$html .= '<li class="disabled"><span>....</span></li>';
$html .= '<li><a href="?limit=' . $this->limit . '&page_no=' . $last . '">' . $last . '</a></li>';
}
$class = ($this->page_no == $last)? "disabled" : "";
$next_page = ( $this->page_no == $last)?
'<li class="' . $class . '"><a href="">»</a></li>':
'<li class="' . $class . '"><a href="?limit=' . $this->limit . '&page_no=' . ($this->page_no + 1) . '">»</a></li>';
$html .= $next_page;
$html .= '</ul>';
return $html;
}
}
?>
在执行查询之前,get_data()中的查询现在有一个$ value的参数。
答案 1 :(得分:0)
我不使用bind param而只使用execute语句。
public function get_no_records($param)
{
$query = "SELECT * FROM users_tbl WHERE username = :my_value;";
$this->query = $query; //What use do I have?
$stmt = $this->db->prepare($query);
$stmt->execute(array(':my_value' => $param));
$row_num = $stmt->rowCount();
if($row_num > 0)
{
$this->total_rec = $row_num;
return $row_num;
}
return 0; //Added so the function always has a return value
}
':value'
的绑定是通过创建一个仅用作执行函数参数的关联数组来完成的。