Tom: Script aus DB

Beitrag lesen

Hello,

wie stelle ich es am besten an, dass ich ein PHP-Script aus einer Datenbank holen kann und ausführen?

$sql = "Select show_function from object where object_type = 'atomium'";
$res = mysql_query($sql,$con);
if (!$res)
{
  echo "Keine Anzeigefunktion vorhanden";
}
else
{
  $_rec = mysql_fetch_asscoc($res);
  eval($_rec['show_function']);   ## hier ist Verbesserungsbedarf
}

Du musst dabei bedenken, dass eval() die Statements an die Stelle im Script stellt, an der es aufgerufen wurde. Das kann im einfachen Modell von PHP < 5 zu konflikten im Namensraum kommen. Auch wenn Du in der DB "echte Funktionsdefinitionen" stehen hast und lädst die innerhalb eines Scriptes auf diese Weise ein zweites Mal, bekommst Du einen Redefine-Error.

Den namensraumkonflikt kann man abfangen, indem man das eval() grundsätzlich nicht in der obersten Ebene des Scriptes, sondern in einer eigenen Funktion aufruft, der man dann nur diejenigen Variablen durchreicht, die gelesen oder geändert werden dürfen. Andere Variablen, die man dann innerhalb der "Funktion aus der DB" definiert oder verändert, haben dann keinen Einfluss mehr auf das übrige Script.

Sollte Fabian hier mitlesen, hat er gleich die Aufgabenstellung für unser eigenes CMS.

Das größte Problem liegt also noch in der Definietion von Funktionen innerhalb des Datensatzes.

Noch ein paar Worte zu "rein IMHO ist das zwar Unfug/Bloedsinn,..."

Dieses Verfahren mit objektorientiertem Code zu arbeiten ist gerade bei größeren Projekten keinesfalls Blödsinn. Wenn man sich vorstellt, dass es mehrere hundert Objektklassen mit jeweils einer eigenen Anzeigefunktion (oder was auch immer die machen soll) gibt, und man die mehrere zehntasusend klassifizierte Objetke in einer Tabelle gespeichet hat, dann ist es ein Klacks für die DBE, über eine Relation zur Objektklasse auch die passende Anzeigefunktion zu beschaffen. Man hat dann vielleicht 10 Objekte (von mehreren 10.000) aus z.B. drei Klassen. Warum sollte ich also die anderen 497 Anzeigefunktionen auch bereitstellen, oder erst im Script wesentlich zeitaufwändiger einzelne Includes oder Reads auslösen, die nun die Funktionen dazuladen?

Problem auch hier, das noch zu lösen ist: Redundanz der zugeladenen Funktionen. Vielleicht könnte da ein SQL-DB-Künstler mal helfen, wie man die unterdrücken kann?

Liebe Grüße aus http://www.braunschweig.de

Tom

--
[ Computer-Camp für PHP-Anwender in den Sommerferien. Programmieren,
  Sport, Fun, Fete. Teilnehmermindestalter Gruppe 1: 14 Jahre
  Mindestalter Gruppe 2+3 18 Jahre, Info bei mir ]
Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen