Ankündigung

Einklappen
Keine Ankündigung bisher.

Parameter 2 to mysqli_stmt::bind_param() expected to be a reference, value given

Einklappen

Neue Werbung 2019

Einklappen
Dieses Thema ist geschlossen.
X
X
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • Parameter 2 to mysqli_stmt::bind_param() expected to be a reference, value given

    Hey Leute

    Ich wollte nur mal wissen, wie man diesen Müll umgehen kann und vielleicht zusätzlich, warum die jetzt versuchen einen Daten-Parameter an eine Variable zu binden. Ich blick da nun echt ganz und gar nicht mehr durch...
    Mir ist der Sinn eines "Prepared-Statement" durchaus klar: "Die Möglichkeit einer "injection" zu verringern."

    Nun wollen die aber nun auch noch den Wert einer Variablen-Value zusätzlich aufgreifen in neueren PHP Versionen. Warum? Versteht vermutlich keiner. Nicht mal die, die es programmiert haben.

    Wie auch immer es ist nun mal die neue PHP Version die jetzt kommt (oder schon da ist, 6x-7x).

    Jetzt hab ich folgenden Code:

    PHP-Code:
                            if(!call_user_func_array(array($stmt'bind_param'), db_build_parameters($asso$db$where))) {
                                
    $emsg $stmt->error;
                                
    $stmt->close();
                                
    $db->close();
                                if (
    $autoreport) { ht_debug_msg(10, array(false,array('dbpmui',$table,$emsg)), 2); }
                                return 
    ht_system_message(10, array(false,array('dbpmui',$table,$emsg)));
                            } 

    Wobei "db_build_parameters" anscheinend eine Referenz benötigt und ich echt keine Ahnung habe von wo den diese blöde Referenz kommen sollte...?

    PHP-Code:
        function db_build_parameters ($array$link$where=false) {
            
    $params[0] = '';
            foreach (
    $array as $index => $value) {
                if (
    is_array($value)) {
                    
    $params[0] .= 's';
                    
    $params[] = $link->real_escape_string(db_gen_array($value));
                }
                else {
                    
    $params[0] .= db_get_value_type($value);
                    
    $params[] = $link->real_escape_string($value);
                }
            }
            if (
    is_array($where)) {
                foreach (
    $where as $value) {
                    
    $params[0] .= db_get_value_type($value);
                    
    $params[] = $link->real_escape_string($value);
                }
            }
            return 
    $params;
        } 


    Ich habe die Guides jetzt echt 100x gelesen verstehe aber immer noch nicht, wie ich nun eine Referenz auf die aktuellen Parameter herstellen soll... (type = "irgendwas", data = ""naja hald einfach nur Daten, fertig!") Wo sollte ich jetzt Referenzen zu meinen Werten herstellen die in einem X-Beliebigen Array zusammengestellt wurden???



    Edit: Und mein Motto ist nunmal ich probiere nichts bevor ich es nicht richtig verstanden hab..

  • #2
    Moin,
    wenn möglich... nutz einfach PDO statt mysqli. Und wenn der Umstieg ein paar Stunden benötigt... es lohnt sich wirklich.
    Es ist einfach 3453453 mal überlegen, auch (bzw. gerade) wegen solcher Dinge.

    Das ist wohl ein Workaround für mysqli https://stackoverflow.com/a/16120923/3595565
    PHP-Code:
    call_user_func_array(array($stmt'bind_param'), refValues($params));

    function 
    refValues($arr){
        if (
    strnatcmp(phpversion(),'5.3') >= 0//Reference is required for PHP 5.3+
        
    {
            
    $refs = array();
            foreach(
    $arr as $key => $value)
                
    $refs[$key] = &$arr[$key];
            return 
    $refs;
        }
        return 
    $arr;

    [COLOR=#A9A9A9]Relax, you're doing fine.[/COLOR]
    [URL="http://php.net/"]RTFM[/URL] | [URL="http://php-de.github.io/"]php.de Wissenssammlung[/URL] | [URL="http://use-the-index-luke.com/de"]Datenbankindizes[/URL] | [URL="https://www.php.de/forum/webentwicklung/datenbanken/111631-bild-aus-datenbank-auslesen?p=1209079#post1209079"]Dateien in der DB?[/URL]

    Kommentar


    • #3
      jow danke, damit bin ich soweit wie vor dem Thread mit google war, natürlich ist mir genau dieser Thread bei stackoverflow durchaus bekannt. Jetzt wollen die die Parameter als Array und geben diesen als symbolischen Wert zurück.

      Scheint mir echt nicht Schlüssig und Sinnvoll zu sein.

      Gruss

      Kommentar


      • #4
        Was ich damit mein ist folgendes: Ich hab ein absolut abstraktes key-pair mit einem [0] string als einzelner Char welches den Typ des nächsten Datensatz (welcher als Array nachfolgend von 0 gespeichert wird) definiert.
        [0] s s i s s
        [1] "bla"
        [2] "blabla"
        [3] 398423893289
        [4] "bla"
        [5] "blbalea"

        [0] definiert den Datentyp und alles nach 0 sind die Datensätze...???

        Kommentar


        • #5
          Ich würde auf das umständliche mysqli verzichten und PDO verwenden. Warum sich mit sowas herumplagen?

          Kommentar


          • #6
            Frag nicht nach dem warum sondern sag mir das "wie"? :P

            Kommentar


            • #7
              Also gut ihr fragt mich nach dem wieso...? Mein Code habe ich vor ca. 2 Jahren entwickelt und er macht durchaus Sinn, es ist ein sehr komplexer Code mit etwa 40'000 Zeilen (also nicht einfach blöde if-else Schleifen). Ich kann jetzt nicht weiter darauf eingehen. Aber seit dem neusten Patch macht mir einfach dieses neue Prepaird Statemant Probleme, fertig. Ich habe diesen Fehler einzig und allein auf dieses Prepaird-Statemant reduziert und hoffe ihr könnt mir hier helfen...

              Kommentar


              • #8
                warum die jetzt versuchen einen Daten-Parameter an eine Variable zu binden
                Frag das die PHP-Entwickler, die haben das so entschieden.

                Ich wollte nur mal wissen, wie man diesen Müll umgehen kann
                Mit dem splat-Operator. http://php.net/manual/de/functions.a...iable-arg-list

                Kommentar


                • #9
                  Danke ich bin ein Idiot,

                  Edit: Aber wenn du so schlau bist dann sag mir doch wie man's richtig macht..

                  Edit2: Drei verdammte Punkte ... lösen mein Problem überhaupt nicht...

                  Kommentar


                  • #10
                    Aber wenn du so schlau bist dann sag mir doch wie man's richtig macht..
                    Man nimmt gleich PDO.

                    Kommentar


                    • #11
                      Vor 2-3 Jahren komm mann will mir echt niemand helfen...????

                      Kommentar


                      • #12
                        Ich mein sorry nochmals mysqli fügt den Scheiß ja echt nicht nur ein um mich zu nerven oder?

                        Kommentar


                        • #13
                          http://php.net/manual/en/mysqli-stmt.bind-param.php
                          erster Kommentar unter user contrbuted notes!

                          Kommentar


                          • #14
                            Kannst du ein kleines Testscript vorbereiten in dem das Problem dargestellt wird?
                            Mysqli ist immer eklig, da ist es gut wenn man eine Vorlage zum Ausprobieren hat.
                            [COLOR=#A9A9A9]Relax, you're doing fine.[/COLOR]
                            [URL="http://php.net/"]RTFM[/URL] | [URL="http://php-de.github.io/"]php.de Wissenssammlung[/URL] | [URL="http://use-the-index-luke.com/de"]Datenbankindizes[/URL] | [URL="https://www.php.de/forum/webentwicklung/datenbanken/111631-bild-aus-datenbank-auslesen?p=1209079#post1209079"]Dateien in der DB?[/URL]

                            Kommentar


                            • #15
                              Ja ok, aber heute nicht mehr. Btw.: protestix ja mein Arsch juckt, aber verdammt ich will hier jetzt echt nicht kratzen....

                              Kommentar

                              Lädt...
                              X