• Jetzt anmelden. Es dauert nur 2 Minuten und ist kostenlos!

variable insert funktion

Mad Dog

Mitglied
hey leute,

ich baue mir gerade eine variable insert funktion zusammen.
als parameter werden unter anderem tabellen name, werte etc uebergeben.
daraus wird das sql statement zusammengebaut und soll dann mittels prepared statement ausgefuehrt werden.

jetzt muss eine bestimmte funktion benutzten und zwar call_user_func_array.
wie sie allgemein funktioniert ist mir bewusst, meine frage waere jetzt aber, ob man bereits vorhandene funktionen als callback funktion benutzten kann oder ob es eine eigene sein muss?

hier der code:
Code:
    public function insert($ignore, $table, $rows, $values, $type)
    {    
        $sql = 'INSERT';
        
        // IGNORE checken
        if ($ignore === TRUE)
        {
            $sql .= ' IGNORE';     
        }
        // Tabellenname einfuegen
        if ((empty($table) === FALSE) AND (is_array($table)) === FALSE)
        {
            $sql .=  ' INTO '.$this->real_escape_string(trim($table));
        }
        else
        {
            return FALSE;
        }
         
         if ((empty($rows) === FALSE) AND (is_array($rows) === TRUE))
         {
             // Namen der Spalten saeubern
          $escapedKeys = array_map(array($this, 'escape_string'), array_values($rows));
          
          // Spalten einfuegen
        $sql .= ' ('.implode(', ', $escapedKeys). ')';
        
        // Platzhalter fuer die werte einfuegen
          $sql .= ' VALUES ('.implode(', ', array_fill(0, count($rows), '?')).')';      
         }      
         else
         {
             return FALSE;
         }  
         $array1 = array_merge((array)$type, $values);

          if (!($this->mysqli_stmt->prepare($sql)))
            {
                return FALSE;
            }
            else if (!call_user_func_array($this->mysqli_stmt->bind_param, $array1))
            {            
                return FALSE;
      }
            else if (!($this->mysqli_stmt->execute()))
            {
                return FALSE;
            }
            else
            {
                if (($this->mysqli_stmt->affected_rows) == -1)
                {
                    return FALSE;
                }
                else if (($this->mysqli_stmt->affected_rows) == 0)
                {
                    return FALSE;
                }
                else
                {
                    return TRUE;
                }
            }
      
    }

und zwar moechte ich die mysqli_stmt_bind_param funktion benutzten.
jedoch erhalte ich folgenden fehler:

Warning: call_user_func_array() expects parameter 1 to be a valid callback, no array or string given in C:\Programs\xampp\htdocs\9mango\acp\core\classes\class_db.php on line 437
false

kann mir da jemand weiterhelfen?

mfg
mad dog
 
Werbung:
PHP:
call_user_func_array(array($this->mysqli_stmt, 'bind_param'), $array1);

Weiß nicht ob da call_user_func_array() sinnvoll ist. Warum rufst du die Funktion nicht direkt auf?
 
naja das wuerde ich ja gerne, aber die funktion soll ja variable sein und daher weiss ich nicht wie viele values ich habe.
es koennen 2 sein, aber auch 5 oder vlt sogar mehr :)
 
Werbung:
sorry das ich erst jetzt antworte.
danke das hat schon mal weiter geholfen.

jetzt kommt nur folgender fehler:
Warning: Parameter 2 to mysqli_stmt::bind_param() expected to be a reference, value given in C:\Programs\xampp\htdocs\9mango\acp\core\classes\class_db.php on line 437

dieses reference. ich habe bei google etwas gefunden von wegen pass by reference, wonach das & eine rolle spielt in der parameter angabe meiner funktion.

jedoch auch mit diesem & vor $values und $type aendert sich nichts.
da weiss ich leider nicht wie ich das problem beheben kann...

mfg
 
ahhhhhhh vielen dank :D

einfach ein neues array schreiben und die wert als referenz uebergeben :D
haette man auch selber drauf kommen koennen.
 
Werbung:
Zurück
Oben