Hallo,
ich hab hier ein absolutes Verständnisproblem. Ich hoffe Ihr könnt mir hier weiterhelfen.
Also vorab, soweit ich das gelesen und verstanden habe übergibt PHP seine Werte immer als Call-by-Value, nie als Referenz es sei denn es wird explizit mit dem Ampersand vorangestellt angegeben.
Mein Problem ist nun, ich versuche mittels eval einen PHP Befehl zusammenzusetzen, und der Parser meckert immer, das der zweite Parameter von der Methode $stmt->bin_param keine Referenz sein darf. Aber nach meinem Verständnis ist sie das auch nicht.
Schaut doch bitte einmal drüber.
Wieso ist denn nun $ph_values bzw. $this->ph_values eine Referenz?
An dieser Stelle
gibt es das besagte Problem.
Fehlermeldung: PHP Fatal error: Cannot pass parameter 2 by reference in <insertfilenamehere>(99) : eval()'d code on line 1
ich hab hier ein absolutes Verständnisproblem. Ich hoffe Ihr könnt mir hier weiterhelfen.
Also vorab, soweit ich das gelesen und verstanden habe übergibt PHP seine Werte immer als Call-by-Value, nie als Referenz es sei denn es wird explizit mit dem Ampersand vorangestellt angegeben.
Mein Problem ist nun, ich versuche mittels eval einen PHP Befehl zusammenzusetzen, und der Parser meckert immer, das der zweite Parameter von der Methode $stmt->bin_param keine Referenz sein darf. Aber nach meinem Verständnis ist sie das auch nicht.
Schaut doch bitte einmal drüber.
PHP-Code:
// $querystring enthält den Query mit entsprechenden Platzhaltern
// $tpyes enthält die Werte, von welchem Typ das erwartete $_POST/$_GET Feld sein muss
// $placeholder enthält die Anzahl an Platzhaltern im Query
public function prepQuery($querystring,$types,$arr_placeholder_values = array())
{
// Prüft ob die Anzahl der Platzhalter mit der Anzahl der Typen und Datenfeldern übereinstimmt
$ph = substr_count($querystring,"?"); // Berechnet die Anzahl an Platzhaltern im querystring
if(($ph == count($arr_placeholder_values)) && ($ph == strlen($types)))
{
$stmt = $this->db->prepare($querystring);
$this->prepForBinding($types,$arr_placeholder_values); // Aufruf um die Parameter für bind_param vorzubereiten
eval('$stmt->bind_param(' . $this->types . ', ' . $this->ph_values . ');'); // Setzt die Werte als PHP Befehl für bind_param zusammen
$stmt->execute();
}
else
{
throw new Exception("Die übergebenen Werte sind nicht stimmig!");
}
}
private function prepForBinding($types,$arr_placeholder_values)
{
$ph_values = false;
foreach($arr_placeholder_values as $temp)
{
$ph_values .= '\'';
$ph_values .= $temp . "'";
$ph_values .= ',';
}
$ph_values = rtrim($ph_values,","); // Entfernen des letzten Kommazeichens
$types = '\'' . $types . '\''; // Einfache Anführungsstriche hinzugefügt, damit bind_param mit diesem Wert arbeiten kann
$this->ph_values = $ph_values;
$this->types = $types;
}
An dieser Stelle
PHP-Code:
eval('$stmt->bind_param(' . $this->params . ', ' . $this->ph_values . ');');
Fehlermeldung: PHP Fatal error: Cannot pass parameter 2 by reference in <insertfilenamehere>(99) : eval()'d code on line 1
Kommentar