2017-05-19 2 views
0

Erhalte einen Fehler beim Versuch, Daten aus einer Datenbank basierend auf ID, die ich von i-Taste auf einer vorherigen Seite erhalten. Wenn ich die id echo nur gibt es mir die korrekte ID aber in der vollen Abfrage gibt mir diese Fehlermeldung:Uncaught Ausnahme 'PDOException' mit Nachricht 'SQLSTATE [HY093]: beim Abrufen von Informationen aus der Datenbank

Fatal error: Uncaught exception 'PDOException' with message 'SQLSTATE[HY093]: Invalid parameter number: no parameters were bound' in

Ich habe bei dieser einige SO Antworten, aber keiner von ihnen löste das Problem, das ich hatte.

<?php 
$fetch_article_info = $db->query("select * from news_article where id = :id"); 
    $fetch_article_info->execute(array(':id' => $_GET['id'])); 
$list = $fetch_article_info->fetchAll(PDO::FETCH_ASSOC); 
?> 

Hier sind einige meiner öffentlichen funtions in db.class, die ich denken könnte

class Database{ 

private $host = DB_HOST; 
private $user = DB_USER; 
private $pass = DB_PASS; 
private $dbname = DB_NAME; 
// database handler 
private $dbh; 
private $error; 

private $stmt; 


public function __construct(){ 
    // Set DSN 
    $dsn = 'mysql:host=' . $this->host . ';dbname=' . $this->dbname; 
    // Set options 
    $options = array(
     PDO::ATTR_PERSISTENT => true, 
     PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION 
    ); 
    // Create a new PDO instanace 
    try { 
     $this->dbh = new PDO($dsn, $this->user, $this->pass, $options); 
    } 
    // Catch any errors 
    catch (PDOException $e) { 
     $this->error = $e->getMessage(); 
    } 
} 
    public function bind($param, $value, $type = null){ 
    if (is_null($type)) { 
    switch (true) { 
     case is_int($value): 
     $type = PDO::PARAM_INT; 
     break; 
     case is_bool($value): 
     $type = PDO::PARAM_BOOL; 
     break; 
     case is_null($value): 
     $type = PDO::PARAM_NULL; 
     break; 
     default: 
     $type = PDO::PARAM_STR; 
    } 
    } 
    $this->stmt->bindValue($param, $value, $type); 
} 
public function query($query){ 
     $this->stmt = $this->dbh->prepare($query); 
    } 

    public function execute(){ 
     return $this->stmt->execute(); 
    } 

    public function resultset(){ 
     $this->execute(); 
     return $this->stmt->fetchAll(PDO::FETCH_ASSOC); 
    } 

    public function single(){ 
     $this->execute(); 
     return $this->stmt->fetch(PDO::FETCH_ASSOC); 
    } 
+0

Ändern Sie 'query' in' prepare' Aufruf, bereiten Sie eine Anweisung mit Platzhaltern vor und führen Sie sie mit Parametern aus. '$ fetch_article_info = $ db-> prepare (" wähle * aus news_article mit ID =: id ");' – Fracsi

+0

@Fracsi Danke für deine Antwort, die du versucht hast, bevor du die Warnung erhältst: PDO :: prepare(): SQLSTATE [00000]: Nein Fehler: PDO-Konstruktor wurde nicht aufgerufen, wenn ich prepare – marijn

+0

verwende Ihr Fehler gibt das Problem an, Ihr Parameter ist nicht korrekt gebunden. – Option

Antwort

1

Sie sehr nützlich sein, nicht in Ihre ausführen Funktion übergeben. Siehe unten.

$db->execute(array(':id' => $_GET['id'])); 
$list = $db->resultset(PDO::FETCH_ASSOC); 

print_r($list); 

// db.php file 
public function execute($params){ 
    return $this->stmt->execute($params); 
} 

public function resultset(){ 
    // $this->execute(); 
    return $this->stmt->fetchAll(PDO::FETCH_ASSOC); 
} 
+0

Er führt eine Abfrage aus, Sie müssen keine Ausführung ausführen. – Option

+0

Getestet auf meinem lokalen. Funktioniert für mich nach dem Ändern seines Codes. – devofash

Verwandte Themen