php.de

Zurück   php.de > Webentwicklung > Datenbanken

Datenbanken SQL und Co

Antwort
 
LinkBack Themen-Optionen Thema bewerten
Alt 03.03.2009, 12:06  
Erfahrener Benutzer
 
Registriert seit: 06.09.2008
Beiträge: 189
#Avedo befindet sich auf einem aufstrebenden Ast
Standard MySQLi und Prepared Statements

Hallo zusammen.

Ich habe mal wieder ein kleines Problem. Ich möchte aus einer Datenbank via MySQLi und prepared Statements Datensätze auslesen. Leider kann ich nicht genau sagen, wieviele Felder ein solcher Datensatz enthält. Daher suche ich eine Möglichkeit den Aufruf von mysqli_stmt::bind_result() zu umgehen. Wie müsste ich also folgenden Code ändern, um einen Datensatz als assoziatives Array zurück zu erhalten?

MfG, Andy

PHP-Code:
// create mysqli object
$mysqli = new mysqli("localhost""my_user""my_password""my_db");

// check if mysqli object was created
if( mysqli_connect_errno() )
{
    throw new 
Exception('Connection failed');
}

// create select statement
$select "SELECT
        *
    FROM 
        authors
    WHERE ID = ?"
;
        
// prepare statement
$stmt $mysqli->prepare($select);
            
// assign key
$stmt->bind_param("i"$key);
            
// execute prepared statement
if( $stmt->execute() )
{
    
// bind the result data
    
$stmt->bind_result($id$name$mail$age);

    
// fetch values */
    
while( $stmt->fetch() )
    {
        
printf("%s %s %s %s\n"$id$name$mail$age);
    }
}
        
// close statement
$stmt->close(); 
__________________
I'm so tired of slitting the throats of people calling me a violent psychopath.
#Avedo ist offline   Mit Zitat antworten
Sponsor Mitteilung
PHP Code Flüsterer

Registriert seit: 21.08.2005
Beiträge: 4682
PHP-Kenntnisse:
Fortgeschritten

Alt 03.03.2009, 12:25  
Erfahrener Benutzer
 
Registriert seit: 28.03.2008
Beiträge: 1.847
HPR1974 wird schon bald berühmt werden
Standard

Ich bin mir gar nicht sicher ob das überhaupt geht...
HPR1974 ist offline   Mit Zitat antworten
Alt 03.03.2009, 12:35  
Erfahrener Benutzer
 
Registriert seit: 28.03.2008
Beiträge: 1.847
HPR1974 wird schon bald berühmt werden
Standard

die Anzahl der Felder erhälst Du über mysqli_field_count
schau mal die Funktion $stmt->result_metadata() an..

Geändert von HPR1974 (03.03.2009 um 12:40 Uhr).
HPR1974 ist offline   Mit Zitat antworten
Alt 03.03.2009, 13:10  
Erfahrener Benutzer
 
Registriert seit: 06.09.2008
Beiträge: 189
#Avedo befindet sich auf einem aufstrebenden Ast
Standard

Hallo HPR1974!

Danke für deine schnelle Antwort. Das muss auf jeden Fall irgendwie möglich sein. Die Anzahl der Felder hilft mir aber leider nicht wirklich weiter. Sagen wir ich hätte ein Array in dem die Feldnamen drin stehen. Wie kann ich diese Feldnamen nutzen um mit Ihnen ein assoziatives Array mit den Rückgabewerten des Queries zu erzeugen. Meine Idee wäre irgendwie die Funktion call_user_func_array() zu verwenden oder auf die dynamische Erzeugung von Variabeln, wie unten zu sehen zurückzugreifen.

PHP-Code:
// declare variable name
$varname 'my_var';

// assign a value
$$varname 'PHP rocks!';

// output value
echo $my_var 
Die Ausgabe des obigen Codeschnipsels sollte "PHP rocks!" sein.

MfG, Andy

// EDIT: Die Methode $stmt->result_metadata() hilft mir leider nicht wirklich weiter, da das zu erzeugende Objekt andere Feldnamen verwenden kann, als es in der Datenbank geschieht. Jedoch gibt es eine deklarierte Beziehung zwischen dem SpaltenNamen in der Datenbank und dem Feldnamen des Objekts, die durch eine Klasse DataMap in einem ColumnMap Objekt festgehalten wird. So kann ich anhand des Feldnamens den Spaltennamen bestimmen et vice versa.
__________________
I'm so tired of slitting the throats of people calling me a violent psychopath.

Geändert von #Avedo (03.03.2009 um 13:14 Uhr).
#Avedo ist offline   Mit Zitat antworten
Alt 03.03.2009, 15:04  
Erfahrener Benutzer
 
Benutzerbild von Phoscur
 
Registriert seit: 01.12.2008
Beiträge: 450
PHP-Kenntnisse:
Fortgeschritten
Phoscur wird schon bald berühmt werdenPhoscur wird schon bald berühmt werden
Standard

Ich glaub ich hatte das irgendwo aus dem Manual oder aus dem Netz...

Aus meiner MySQLi_Stmt Klasse..
PHP-Code:
class StmtMySQLi extends mysqli_stmt
{
// [...]
    /**
     * Fetch one result (array)
     *
     * @param MYSQLI_RESULTMODE_TYPE $resultmode
     * @return array $result
     */
    
public function getOne($resultmode MYSQLI_ASSOC)
    {
        
$this->execute();
        
$result $row $result_both = array();
        
$meta $this->result_metadata();
        while (
$field $meta->fetch_field()) {
            switch (
$resultmode) {
                case 
MYSQLI_ASSOC:
                    
$result[$field->name] = &$row[$field->name];
                    break;
                    
                case 
MYSQLI_NUM:
                    
$result[] = &$row[$field->name];
                    break;
                    
                case 
MYSQLI_BOTH:
                    
$result[$field->name] = &$row[$field->name];
                    
$result_both[] = &$row[$field->name];
            }
        }
        
call_user_func_array(array($this,'bind_result'),$result);
        
$this->fetch();
        
$this->free_result();
        return 
$result+$result_both;
    }
// [...]

__________________

Geändert von Phoscur (03.03.2009 um 15:16 Uhr).
Phoscur ist offline   Mit Zitat antworten
Alt 24.03.2010, 17:39  
Benutzer
 
Registriert seit: 12.11.2008
Beiträge: 72
regsnerven befindet sich auf einem aufstrebenden Ast
Standard

sorry, dass ich jetzt nen alten Thread ausgrabe, aber ich brauche diese Klassenerweiterung gerade und verstehe sie gerade nicht wirklich.
Was soll diese $row-Variabel da? Die hat doch überhaupt keinen Sinn, da sie komplett leer ist.

PHP-Code:
class StmtMySQLi extends mysqli_stmt
{

    
/**
     * Fetch one result (array)
     *
     * @param MYSQLI_RESULTMODE_TYPE $resultmode
     * @return array $result
     */
    
public function getOne($resultmode MYSQLI_BOTH)
    {
        
$this->execute();
        
$result $result_both = array();
        
$meta $this->result_metadata();
        while (
$field $meta->fetch_field()) {
            switch (
$resultmode) {
                case 
MYSQLI_ASSOC:
                    
$result[$field->name] = NULL;
                    break;
                    
                case 
MYSQLI_NUM:
                    
$result[] = NULL;
                    break;
                    
                case 
MYSQLI_BOTH:
                    
$result[$field->name] = NULL;
                    
$result_both[] = &$result[$field->name];
            }
        }
        
call_user_func_array(array($this,'bind_result'), $result);
        
$this->fetch();
        
$this->free_result();
        return 
$result+$result_both;
    }

Würde es nicht auch so reichen? Es funktioniert für mein eines Beispiel, allerdings bin ich mir nicht sicher, ob es immer funktionieren wird.

Gr33tZ
Rn
regsnerven ist offline   Mit Zitat antworten
Antwort


Themen-Optionen
Thema bewerten
Thema bewerten:

Forumregeln
Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are an
Gehe zu

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
MySQLi: bind_param & LIKE snatch-ic Datenbanken 3 22.12.2009 23:09
Schützt mysqli vor SQL-Injections? snatch-ic Datenbanken 6 08.08.2009 15:49
mysqli ersetzen schlurpsel Datenbanken 4 23.11.2008 19:40
PDO: beginTransaction nicht mit prepared statements? HStev PHP Tipps 2008 0 16.09.2008 14:35
PDO: 2 Statements nacheinander? HStev PHP Tipps 2008 4 25.08.2008 11:24
[Erledigt] Problem mit MySQLi Login + Session Raito PHP Tipps 2008 7 29.07.2008 22:49
Verstädnissproblem MySQLI Kein Genie PHP Tipps 2008 2 24.06.2008 16:16
mysqli bind param notyyy PHP Tipps 2008 3 20.05.2008 18:26
Frage zu prepared statements mit pdo Mack22 PHP-Fortgeschrittene 3 16.05.2008 15:10
Geltungsbereich mysqli Objekt R4v3r PHP Tipps 2007 12 28.03.2007 22:01
PHP5 -> MySQLi erben snatch-ic PHP Tipps 2007 1 08.02.2007 18:05
mysqli als Objekt CC84 PHP-Fortgeschrittene 31 11.05.2006 20:39
[Erledigt] DB-Design und die Statements dazu Datenbanken 2 13.01.2006 11:15
MySQL vs. MySQLi Shade PHP Tipps 2007 4 05.11.2005 15:22
PHP Fatal error: Class 'MySQLi' not found in CSS PHP Tipps 2005 6 13.04.2005 15:24

Besucher kamen über folgende Suchanfragen bei Google auf diese Seite
mysqli prepared statements, mysqli prepare, mysql prepared statements, php mysql prepared statements, mysqli prepared statement, php prepared statements mysql, php prepared statements, mysql prepared statements php, prepared statements php, php mysqli prepared statements, php mysql prepared statement, prepared statements mysqli, php mysqli prepare, prepared statement php, mysql php prepared statements, php mysqli prepared statements keys lesen, mysqli stmt, mysqli prepare select, php prepared statement, prepared statement mysqli

Alle Zeitangaben in WEZ +2. Es ist jetzt 07:26 Uhr.




Powered by vBulletin® Version 3.7.2 (Deutsch)
Copyright ©2000 - 2012, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO 3.2.0
Aprilia-Forum, Aquaristik-Forum, Liebeskummer-Forum, Zierfisch-Forum, Geizkragen-Forum