Ich habe die folgende Codezeile, die in PHP 5.1 funktioniert hat, aber in PHP 5.3 nicht funktioniert.
%Vor%In PHP 5.3 erhalte ich folgende Warnmeldung:
Warnung: Parameter 2 für mysqli_stmt :: bind_param () sollte ein Verweis sein, Wert in /var/www/startmission/em/class/cls.data_access_object.php in Zeile 785
Ich habe den Code folgendermaßen geändert und es funktionierte:
%Vor%Ich habe das in der php-Dokumentation gefunden:
Vorsicht ist geboten, wenn Sie mysqli_stmt_bind_param () in verwenden Verbindung mit call_user_func_array (). Beachten Sie, dass mysqli_stmt_bind_param () benötigt Parameter, die als Referenz übergeben werden. während call_user_func_array () als Parameter eine Liste von akzeptieren kann Variablen, die Referenzen oder Werte darstellen können.
Meine Frage ist also, wie repliziere ich die Funktionalität von call_user_func_array + bind_params so, dass ich Variablen zur Laufzeit dynamisch binden kann?
Ich fand die Antwort auf mein Problem in einer Benutzer-Notiz von fabio at kidopi dot com dot vor 3 Jahren auf der PHP-Manpage von mysqli_stmt::bind_param()
(leicht modifiziert):
Ich hatte Probleme mit
call_user_func_array
undbind_param
nach der Migration zu PHP 5.3.Die Ursache ist, dass 5.3 Array-Werte als Referenz benötigt, während 5.2 mit realen Werten arbeitet (aber auch mit Referenzen). Also habe ich eine sekundäre Hilfsfunktion erstellt, die mir dabei hilft:
%Vor%und änderte meine vorherige Funktion von:
%Vor%zu:
%Vor%Auf diese Weise funktionieren meine db-Funktionen weiterhin in PHP 5.2 / 5.3 Servern.