Hey
Ich möchte sämtliche MySQLi-Anweisungen in eine einzige Klasse packen. Das klappt soweit ganz gut, bei den Prepared-Statements allerdings stoße ich auf ein Problem. Folgende Methode soll die Anweisung bind_param() übernehmen. Dafür generiere ich ein Array mit allen übergebenen Parametern, welche ich dann an die bind_param() weiterleite, so dass man dann später bequem mit $objekt->set_parameter($bind, $value) die "Variablen" befüllen kann.
Der Code dazu sieht so aus:
Die Variablen werden dann so befüllt:
Das Array wird auf diese Art richtig angepasst (das ergab ein die() ), wenn ich dann allerdings ein execute() aufrufe wird bei einem INSERT-Kommando nicht das eingetragen was ich über set_parameter() festgelegt habe, sondern das was beim initialisieren des arrays eingetragen wurde in die datenbank geschrieben (in dem fall hier also immer "test").
Beim Nachforschen bin ich auf einen Hinweis auf php.net gestoßen:
Aber das hilft mir nicht weiter, meiner Meinung nach werden alle Werte korrekt by reference übergeben?!
Danke für Hilfe
Ich möchte sämtliche MySQLi-Anweisungen in eine einzige Klasse packen. Das klappt soweit ganz gut, bei den Prepared-Statements allerdings stoße ich auf ein Problem. Folgende Methode soll die Anweisung bind_param() übernehmen. Dafür generiere ich ein Array mit allen übergebenen Parametern, welche ich dann an die bind_param() weiterleite, so dass man dann später bequem mit $objekt->set_parameter($bind, $value) die "Variablen" befüllen kann.
Der Code dazu sieht so aus:
PHP-Code:
function bind()
{
//Minimum 2 Argumente werden benötigt
$arg_num = func_num_args();
if ($arg_num < 1) return false;
$datastring = func_get_arg(0);
$i = 1; //0 wird übersprungen da im $datastring
while ($i < $arg_num)
{
$this->params[func_get_arg($i)] = "test"; //Das Array mit den "gebindeten" Variablen
$i++;
}
//$datastring an das array anfügen, zwecks funktionsaufruf
array_unshift($this->params, &$datastring);
//bind_param aufrufen und Parameter übergeben
if (!call_user_func_array(array($this->prep_obj, "bind_param"), &$this->params))
$this->exc("Parameter konnten nicht gebunden werden!");
}
PHP-Code:
function set_parameter($parameter, $value)
{
$this->params[$parameter] = &$value;
}
Beim Nachforschen bin ich auf einen Hinweis auf php.net gestoßen:
Hinweis: Care must be taken when using mysqli_stmt_bind_param() in conjunction with call_user_func_array(). Note that mysqli_stmt_bind_param() requires parameters to be passed by reference, whereas call_user_func_array() can accept as a parameter a list of variables that can represent references or values.
Danke für Hilfe
Kommentar