php.de

Zurück   php.de > Webentwicklung > PHP Einsteiger

PHP Einsteiger PHP Problemlösungen für Spracheinsteiger
Archive: 2004, 2004/2, 2005, 2005/2, 2006, 2007, 2008, 2009, 2010,

Antwort
 
LinkBack Themen-Optionen Thema bewerten
Alt 17.07.2011, 18:43  
Erfahrener Benutzer
 
Registriert seit: 16.08.2007
Beiträge: 702
PHP-Kenntnisse:
Anfänger
Igäl befindet sich auf einem aufstrebenden Ast
Standard [Erledigt] mysqli, bind_result dynamisch füttern schlägt fehl

Tag Leute

Kürzlich habe ich mich entschlossen künftig mit mysqli zu arbeiten. Nun bin ich dabei, meine Mysql-Klasse umzuschreiben. Um folgenden Code-Block geht es zur Zeit:

PHP-Code:
    private function db_select($args)    {
        
$sql "";
        
$col_arr explode(", "strtolower($args[0]));

        if(
count($args) == 2)    {
            
$sql "SELECT ".$args[0]." FROM ".$args[1];
            
$stmt $this->_con->prepare($sql);

            
$stmt->execute();
            
            
//Diese Zeile macht Probleme
            //var_dump($col_arr) --> array(3) { [0]=> string(2) "ID" [1]=> string(4) "Zahl" [2]=> string(12) "Zeichenkette" } 
            
call_user_func_array(array($stmt"bind_result"), $col_arr);

            while(
$stmt->fetch()) {
                echo 
$id." | ".$zahl." | ".$zeichenkette."<br />";
            }
        }
    } 
Nun zu meinem Problem: Wenn ich der Funktion call_user_func_array() den zweiten Parameter, das Array, als Variable mitgebe, kommt folgende Fehlermeldung:
Zitat:
Warning: Parameter 1 to mysqli_stmt::bind_result() expected to be a reference, value given in [...]test\Mysql.class.php on line 117
Wenn ich Parameter zwei al &$col_arr übergebe, bekomme ich folgende Fehlermeldung:
Zitat:
Deprecated: Call-time pass-by-reference has been deprecated in [...]test\Mysql.class.php on line 117
Was die beiden Fehlermeldungen bedeuten ist mir klar. Aus irgendeinem Grund erwartet bind_result(), wenn man es per Callback-Funktion aufruft, die Parameter als Referenz. Andererseits ist das Referenzieren in meiner PHP-Version veraltet.

Wie bringe ich dies nun unter einen Hut? Wäre nett, wenn mir da jemand den Weg aus der Sackgasse weisen könnte. Ich bin grad mit meinem Latein am Ende...

So long, Igäl
__________________
Das Recht auf Dummheit gehört zur Garantie der freien Entfaltung der Persönlichkeit.
Mark Twain
Igäl ist offline   Mit Zitat antworten
Sponsor Mitteilung
PHP Code Flüsterer

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

Alt 17.07.2011, 18:53  
Moderator¹
 
Registriert seit: 28.03.2010
Beiträge: 7.470
PHP-Kenntnisse:
Fortgeschritten
ChrisB ist ein wunderbarer AnblickChrisB ist ein wunderbarer AnblickChrisB ist ein wunderbarer AnblickChrisB ist ein wunderbarer AnblickChrisB ist ein wunderbarer AnblickChrisB ist ein wunderbarer AnblickChrisB ist ein wunderbarer Anblick
Standard

http://www.php.net/manual/en/mysqli-...ult.php#102179
__________________
RGB is totally confusing - I mean, at least #C0FFEE should be brown, right?
ChrisB ist offline   Mit Zitat antworten
Alt 17.07.2011, 19:43  
Erfahrener Benutzer
 
Registriert seit: 16.08.2007
Beiträge: 702
PHP-Kenntnisse:
Anfänger
Igäl befindet sich auf einem aufstrebenden Ast
Standard

Danke dir Chris. Das sieht schonmal gut aus. Nun habe ich aber in der neuen Funktion an ähnlicher Stelle ein Problem. Und zwar hier:

PHP-Code:
        $variables = array();
        
$data = array();
        
$meta $result->result_metadata();
       
        while(
$field $meta->fetch_field())
            
$variables[] = &$data[$field->name]; // pass by reference

        
var_dump($variables); 
der var_dump($variables) gibt folgendes Ergebnis:
Zitat:
array(3) { [0]=> &NULL [1]=> &NULL [2]=> &NULL }
Gebe ich in der Schleife aber $field->name aus, dann werden mir alle Feldnamen angezeigt. Warum werden die Feldnamen in $variables nicht übernommen?

Edit: Kann ich eigentlich eine Referenz auf etwas setzen, was noch gar nicht existiert? Bzw. wird dann, wenn die referenzierte Variable nicht existiert, diese dann angelegt?
__________________
Das Recht auf Dummheit gehört zur Garantie der freien Entfaltung der Persönlichkeit.
Mark Twain

Geändert von Igäl (17.07.2011 um 21:27 Uhr).
Igäl ist offline   Mit Zitat antworten
Alt 17.07.2011, 23:20  
Erfahrener Benutzer
 
Registriert seit: 16.08.2007
Beiträge: 702
PHP-Kenntnisse:
Anfänger
Igäl befindet sich auf einem aufstrebenden Ast
Standard

So... nach etwas Training und erneutem Kopfzerbrechen habe ich fürs erste eine funktionierende Lösung adaptieren können:

PHP-Code:
  /*********************************************************************************************************/
/** Function "db_interaction" is the only function (beside the const-/destructor) interacting directly    **/
/** with the scripts. The first parameter $action declares which function the user wants to use. The    **/
/** second parameter $args contains the arguments (structured in an array) used in specific function.    **/
/*********************************************************************************************************/
    
public function db_interaction($action$args)    {
        
$call_function "db_".$action;

        
$result $this->$call_function($args);

        return 
$result;
    }
/*********************************************************************************************************/   
private function db_select($args)    {
        
$sql "";
        
$return_hash = array();

        if(
count($args) == 2)    {
            
$sql "SELECT ".$args[0]." FROM ".$args[1]."`";
            
$result $this->_con->prepare($sql);
            
$return_hash $this->fetch_data($result);
        }elseif(
count($args) > 2)    {
            
$sql "SELECT ".$args[0]." FROM `".$args[1]."` ".$args[2];
            
$result $this->_con->prepare($sql);
            
$this->set_param($result$args[3]);
            
$return_hash $this->fetch_data($result);
        }

        return 
$return_hash;
    }
/*********************************************************************************************************/
    
private function set_param($res$arr)    {
        
$ref_arr = array();

        for(
$i=0;$i<count($arr);$i++)    {
            
$ref_arr[$i] = &$arr[$i];
        }

        
call_user_func_array(array($res"bind_param"), $ref_arr);
    }
/*********************************************************************************************************/
private function fetch_data($res)    {
    
$return_arr = array();

    if(
$res instanceof mysqli_stmt)    {
        
$res->execute();

        
$res_data $res->get_result();

        
$i=0;
        while(
$row $res_data->fetch_assoc())    {
            foreach(
$row as $k => $v)    {
                
$return_arr[$i][$k] = $v;
            }
            
$i++;
        }
        
$res->close();
    }elseif(
$res instanceof mysqli_result)    {
        while(
$row $res->fetch_assoc())    {
            
$return_arr[] = $row;
        }
    }
    return 
$return_arr;
}
//Ausserhalb der Klasse wird das dann so aufgerufen:
$db = new Mysql("host""user""""table""latin1");

$param[] = "NwID, NwAuthor, NwDate, NwTitle, NwBody";
$param[] = "news";
$param[] = "WHERE NwDate BETWEEN ? AND ?";
$param[] = Array("ii"11360736001167609599);

$test $db->db_interaction("select"$param);

for(
$i=0;$i<count($test);$i++)    {
    echo 
"Author = ".$test[$i]['NwAuthor']."<br />";
    echo 
"Datum = ".$test[$i]['NwDate']."<br />";
    echo 
"Titel = ".$test[$i]['NwTitle']."<br />";
    echo 
"Body = ".$test[$i]['NwBody']."<hr />";

Ist natürlich noch ausbaufähig. Bin mich auch gerade erst am Einlesen. Aber das dynamische Parameter-binden hat mir jetzt echt Kopfzerbrechen bereitet.

So long... Igäl
__________________
Das Recht auf Dummheit gehört zur Garantie der freien Entfaltung der Persönlichkeit.
Mark Twain

Geändert von Igäl (17.07.2011 um 23:57 Uhr).
Igäl 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
[Erledigt] Regulärer Ausdruck schlägt fehl HSFighter PHP Tipps 2010 2 20.08.2010 21:16
Einfache Abfrage schlägt fehl... GoPeter Datenbanken 2 16.06.2010 13:19
IE, replaceChild, name-Attribut identisch, Zugriff schlägt fehl Chriz JavaScript, Ajax und mehr 3 27.04.2010 16:47
[Erledigt] in_array schlägt fehl obwohl werte um array vorhanden sind litterauspirna PHP Tipps 2010 8 13.03.2010 14:57
[Erledigt] Eintrag schlägt fehl Extremefall PHP Tipps 2009 17 19.12.2009 17:42
MySQL Verbindung schlägt fehl, trotz richtigem USER/PW CyberNibbler Datenbanken 5 24.09.2009 19:43
[Erledigt] Dropdown Menü dynamisch füllen (MySQLi) Nicon PHP Tipps 2009 1 24.07.2009 00:59
ReflectionClass export schlägt fehl bei Zugriff auf Klassenkonstante tereano PHP-Fortgeschrittene 4 30.03.2009 13:16
.htaccess login schlägt fehl sternschnuppe99 Server, Hosting und Workstations 6 07.02.2008 13:37
login schlägt immer fehl sternschnuppe99 Server, Hosting und Workstations 3 07.02.2008 13:28
login mit IE schlägt fehl matthros PHP Tipps 2006 3 17.05.2006 15:22
[Erledigt] MySQL 4 installieren bei Linux schlägt fehl! Datenbanken 12 27.06.2005 17:15
cookies setzen schlägt fehl (counter einrichten) PHP Tipps 2005 16 06.01.2005 00:33
Variablen übergeben an FPDF schlägt fehl Soese PHP Tipps 2005 32 02.01.2005 20:45

Besucher kamen über folgende Suchanfragen bei Google auf diese Seite
mysqli bind_result dynamisch, mysqli bind_result, php bind_result dynamisch, bind_result dymnamisch füllen, mysqli_stmt::bind_result() expected to be a reference, value given, php bind_result, php mysqli bind_result dynamisch, mysqli reference, passing array to php bind_result, warning: parameter 1 to mysqli_stmt::bind_result() expected to be a reference, value given, bind_result als funktion, mysqli bind_result variable anzahl, mysqli bind_result count, bind_result array, call_user_func_array wozu, \parameter 1 to mysqli_stmt::bind_result() expected to be a reference, value given\, mysqli prepare schlaegt fehlt bei ajax, mysqli bind_result wozu, php call_user_func_array(array($this->stmt,\'bind_result\'),$params);, mysqli dropdown liste auswählen bearbeiten

Alle Zeitangaben in WEZ +2. Es ist jetzt 15:49 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