2017-10-01 9 views
1

Je ne sais pas vraiment pourquoi j'ai cette erreur, même après les paramètres de liaisonReliure Paramètre AOP préparé Déclaration

SQLSTATE[HY093]: Invalid parameter number: no parameters were bound 

Voici ma fonction

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; 
    } 
} 

La fonction fait partie d'un class.This de paginations est la classe

<?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 . '">&laquo;</a></li>' : 
    '<li class="' . $class . '"><a href="?limit=' . $this->limit . '&page_no=' . ($this->page_no-1) . '">&laquo;</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="">&raquo;</a></li>': 
    '<li class="' . $class . '"><a href="?limit=' . $this->limit . '&page_no=' . ($this->page_no + 1) . '">&raquo;</a></li>'; 
    $html .= $next_page; 
    $html .= '</ul>'; 
    return $html; 
} 

} ?>

+0

de quel type est '$ param'? Et peut-être envisager d'indiquer le type explicitement – JRsz

+0

sa chaîne .. – Muhammed

+0

@JRsz av essayé que..Ma question a été mise à jour avec la classe la fonction est contenue dans – Muhammed

Répondre

0

Je n'utilise pas bind param mais l'instruction execute uniquement.

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 
} 

la liaison de ':value' est fait en créant un tableau associatif qui est utilisé comme paramètre pour l'exécution de la fonction.

+0

Merci. Mais j'ai toujours le même résultat, get_no_records ($ param) est dans une classe et j'ai une variable publique dans la classe où j'attribue la requête à – Muhammed

+0

Avez-vous exactement la même erreur? Et toutes les tables et colonnes sont-elles présentes dans la base de données? – JRsz

+0

J'ai exactement la même erreur, toutes les tables et colonnes sont présentes – Muhammed

1

Merci à vous tous. J'ai obtenu d'où vient l'erreur, c'est le get_data(), puisque cette fonction contient aussi la requête, une valeur doit être liée aussi. Voici mon nouveau code.

<?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 . '">&laquo;</a></li>' : 
    '<li class="' . $class . '"><a href="?limit=' . $this->limit . '&page_no=' . ($this->page_no-1) . '">&laquo;</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="">&raquo;</a></li>': 
    '<li class="' . $class . '"><a href="?limit=' . $this->limit . '&page_no=' . ($this->page_no + 1) . '">&raquo;</a></li>'; 
    $html .= $next_page; 
    $html .= '</ul>'; 
    return $html; 
} 
} 
?> 

la requête dans le get_data() a un paramètre de valeur de $ délimitée maintenant, avant l'exécution de la requête.

+0

Heureux que vous avez débogué et réparé. :) –