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
Einen Kommentar schreiben: