2016-07-19 10 views
-1

Hilfe, ich habe eine Methode in einer Verbindungsklasse erstellt, die mit der lokalen Datenbank verbinden, um einen Datensatz einzufügen. Ich habe erlaubt, dass Parameter an die Methode übergeben werden dürfen, um die Tabelle, Spalten und Werte dynamisch zu wählen.Keine Daten für Parameter in vorbereiteten Anweisung geliefert php

In dieser Methode implodiere ich die Spalten und Platzhalter auf die Abfrage, die in Ordnung ist. Das Problem, das ich habe, ist die Bindung der Werte an die Platzhalter. Ich bekomme immer einen Fehler mit dem Hinweis 'Keine Daten für Parameter in vorbereiteter Anweisung geliefert'. Ich habe einige der gleichen Fragen hier gesucht, aber keine scheint mein Problem zu lösen. Dank

public function InsertQuery($table, $values, $cols) 
{ 
    $placeholders = array(); 

    foreach ($values as $val) { 
     $placeholders[] = '?';  
    } 

    $placeholderList = implode(',', $placeholders); 
    $query = "INSERT INTO $table".'('.implode(',',$cols).') VALUES '. '('.$placeholderList.')'; 
    $connect = $this->dbConnection; 

    if ($stmt = $connect->prepare($query)) { 
     $param_type = array("ssis"); 
     $params_array = array_merge($param_type,$values); 
     call_user_func_array(array($stmt, 'bind_param'), $params_array); 
    } 
} 

Antwort

0

Ihr $param_type vermuten lässt, dass Sie bereits wissen, wie viele Spalten (4) haben werden, aber du bist Funktion als „Variable“ erscheint .Wenn Sie Funktion sind nicht bekommt genau 4 Werte, wird es scheitern, weil ssis für genau 4 params ist.

Lösung wäre wahrscheinlich, dass Sie in Ihre Spalten schauen und nur daran denken, wenn das Integer-Feld kommt und bauen Sie Ihre $param_type Zeichenfolge entsprechend. Oder wenn es eine Kombination von Arten von Werten erlaubt, nun, Sie bekommen das Bild ... Ich hoffe.

Verwandte Themen