bituniverse.com Foren-Übersicht bituniverse.com
Entwickler Forum
 
 FAQFAQ   SuchenSuchen   MitgliederlisteMitgliederliste   BenutzergruppenBenutzergruppen   RegistrierenRegistrieren 
 ProfilProfil   Einloggen, um private Nachrichten zu lesenEinloggen, um private Nachrichten zu lesen   LoginLogin 

Prepared Statements

 
Neues Thema eröffnen   Neue Antwort erstellen    bituniverse.com Foren-Übersicht -> PHP allgemein
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen  
Autor Nachricht
ash



Anmeldedatum: 08.01.2008
Beiträge: 65

BeitragVerfasst am: Fr 30 Jan, 2009 13:03    Titel: Prepared Statements Antworten mit Zitat

Ich habe einen DB Wrapper und möchte eine Methode, die mir von einer Abfrage ein assoziatives Array zurückgibt. Mein Problem: ich verwende Prepared Statements und bekomme es nicht hin, dieses Array zu erstellen.

Eine Methode führt die Abfrage aus:
Php:
  1. <?php
  2. public function query($sql, $params = array())
  3. {
  4.   $stmt = $this->_prepare($sql);
  5.  
  6.   $this->_bindParams($stmt, $params);
  7.    
  8.   $stmt->execute();
  9.    
  10.   return $stmt;
  11. }
  12. ?>

Diese liefert ein Objekt zurück. Die Methode fetchAssoc sieht bisher so aus:
Php:
  1. <?php
  2. public function fetchAssoc($sql, $params)
  3. {
  4.   $stmt = $this->query($sql, $params);
  5.  
  6.   $data = $stmt->result_metadata()
  7.  
  8.   $stmt->bind_result($name, $value);
  9.  
  10.   $result = array();
  11.  
  12.   while ($row = $stmt->fetch()) { 
  13.  
  14.     $result[$name] = $value;
  15.   }
  16.  
  17.     return $result;
  18. }
  19. ?>

Das Problem an der Sache: bind_result() nimmt eine variable Anzahl an Parametern, eben je nach Resultset. Wie bewerkstellige ich diesen Teil sinnvoll? Ich habe diverse Dinge ausprobiert, bin aber auf keinen grünen Zweig gekommen.

Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Gast






BeitragVerfasst am: Mo 02 Feb, 2009 11:47    Titel: Antworten mit Zitat

ich habe leider die Frage nicht verstanden.
Wie wäre es, wenn du einfach PDO benutzt, bzw. die Konzepte davon.

Slava

Nach oben
ash



Anmeldedatum: 08.01.2008
Beiträge: 65

BeitragVerfasst am: Do 05 Feb, 2009 12:08    Titel: Antworten mit Zitat

also, ich möchte einfach eine Methode, die wie mysql_fetch_assoc() funktioniert, nur eben mit prepared statements.

aus den user contribs habe ich diesen Schnipsel:
Php:
  1. <?php
  2. public function fetchAssoc($sql, $params)
  3. {
  4.   // execute();
  5.   $stmt = $this->query($sql, $params);
  6.  
  7.  
  8.   $meta = $stmt->result_metadata();
  9.  
  10.     while ($field = $meta->fetch_field())
  11.     {
  12.       $x = &$row[$field->name];
  13.              
  14.         $params[] = &$row[$field->name];
  15.     }
  16.    
  17.     call_user_func_array(array($stmt, 'bind_result'), $params);
  18.  
  19.     while ($stmt->fetch()) {
  20.         foreach($row as $key => $val)  {
  21.             $c[$key] = $val;
  22.         }
  23.         $result[] = $c;
  24.     }
  25.        
  26.     return $result;
  27. }
  28. ?>

Das erzeugt bei mir allerdings diesen Fehler:
Code:
  1. mysqli_stmt::bind_result() [mysqli-stmt.bind-result]: Number of bind variables doesn't match number of fields in prepared statement in ...

Jmd eine Idee dazu?

Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
ash



Anmeldedatum: 08.01.2008
Beiträge: 65

BeitragVerfasst am: Mi 11 Feb, 2009 20:38    Titel: Antworten mit Zitat

Niemand einen Tipp??

Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Simon W.
Anti-verdenglischungs-Abgeordneter


Anmeldedatum: 05.11.2007
Beiträge: 283
Wohnort: Aachen

BeitragVerfasst am: Mi 11 Feb, 2009 21:47    Titel: Antworten mit Zitat

"Number of bind variables doesn't match number of fields in prepared statement"
Das wäre mein Tipp. Very Happy

Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Gast






BeitragVerfasst am: Mi 11 Feb, 2009 21:54    Titel: Antworten mit Zitat

yeah, und nun? Das Problem ist ja, dass dies bei Abfragen differieren kann und somit dynamisch ermittelt werden müsste. Allerdings hat bisher keiner meiner Ansätze (oder der der User Contribs) funktioniert.

Die Fehlermeldung lesen bekomme ich gerade noch zustande Wink

Nach oben
Simon W.
Anti-verdenglischungs-Abgeordneter


Anmeldedatum: 05.11.2007
Beiträge: 283
Wohnort: Aachen

BeitragVerfasst am: Do 12 Feb, 2009 00:18    Titel: Antworten mit Zitat

Ja und das blöde ist, dass die Fehlermeldung sogar stimmt. Wink Du nutzt $params einerseits, um die Parameter zu übergeben und dann nachher, um eine Liste mit Ergebnissen aufzubauen... Und wo wird das Array geleert/zurückgesetzt? Wink

Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
ash



Anmeldedatum: 08.01.2008
Beiträge: 65

BeitragVerfasst am: Do 12 Feb, 2009 14:25    Titel: Antworten mit Zitat

Simon W. hat Folgendes geschrieben:
Du nutzt $params einerseits, um die Parameter zu übergeben und dann nachher, um eine Liste mit Ergebnissen aufzubauen... Und wo wird das Array geleert/zurückgesetzt? Wink

Yeah, genau das hatte ich übersehen, jetzt läuft es. Danke.

Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Beiträge der letzten Zeit anzeigen:   
Neues Thema eröffnen   Neue Antwort erstellen    bituniverse.com Foren-Übersicht -> PHP allgemein Alle Zeiten sind GMT + 1 Stunde
Seite 1 von 1

 
Gehe zu:  
Du kannst Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum antworten.
Du kannst deine Beiträge in diesem Forum nicht bearbeiten.
Du kannst deine Beiträge in diesem Forum nicht löschen.
Du kannst an Umfragen in diesem Forum nicht mitmachen.


Powered by phpBB © 2001, 2005 phpBB Group
Deutsche Übersetzung von phpBB2.de
Powered by WebRing.