phpbar.de logo

Mailinglisten-Archive

[php] Automatische Variablenkonvertierung (in PHP)

[php] Automatische Variablenkonvertierung (in PHP)

Peter Bieling network at media-palette.de
Die Jun 20 09:09:09 CEST 2006


Hallo Steffen,

Steffen Kother wrote:

> <code>
> $insert = 'INSERT INTO reklamation.verlauf (letzter_bearbeiter, time) 
> VALUES ("2", '.time().')';
> $insert['query'] = mysql_query($insert, $link) or $insert['error'] = 
> mysql_error();
> </code>
> 
> Spricht doch erstmal ncihts dagegen, oder? [...]

ich meine dagegen spricht eine ganze Menge, nämlich das der Code absolut 
verwirrend ist.
Deine Variable $insert muss für drei Dinge herhalten.
1. $query
2. $result
3. $error
Das Du bei diesem Mischmasch ins Stolpern kommst, wundert mich nicht. ;-)
Ich würde mich bei solchen Abfragen doch eher an die Muster im Manual 
halten. Damit kommt dann auch jeder zurecht, auch Du, wenn Du Dir das 
nach Monaten noch mal ansiehst.

Ich mache das so, dass ich die typischen MySQL-Zugriffe in eine separate 
Funktionssammlung ausgelagert habe, die ich über eine 
Konfigurationsdatei automatisch einbinde. Damit spare ich mir den 
meisten Routinecode. Für das Einfügen genügt oft die Übergabe des 
Tabellennamens und ein Array mit den Werten.

Hier mal ein Beispiel:

function pb_insert_data($table, $keys, $entries="") {

     //Falls Daten als Hash kommen
     if ($entries == "") {
         $entries = array_values($keys);
         $keys = array_keys($keys);
     }
     $val_str = "";
     foreach ($entries as $sg) {
         $sg= mysql_escape_string($sg);
         if ($val_str != "") {
          $val_str .= ', ';
         }
         $val_str .=  sprintf("'%s'", $sg);
     }
     if (is_array($keys)) {
         $key_str =  "(" . join(', ',$keys ) . ")";
     } else {
         $key_str = $keys;
     }

     $query = "insert into $table $key_str ";
     $query .= "values (" . $val_str . ")";
     mysql_query($query);

     if (mysql_error()) {
         systemerror($query . ' ' . mysql_error(), __LINE__);
     }
     return mysql_affected_rows();
}


Sicherlich lässt sich da auch noch etwas verbessern, bzw. an eigene 
Zwecke anpassen. (z.B. könnte die Zeilennummer des Funktionsaufrufs 
übergeben werden.)
systemerror ist ebenfalls eine Funktion aus meinem "Framework", die je 
nach Umgebung entweder die Fehler direkt ausgibt und das Skript abbricht 
oder (produktiv) die Fehler in eine Logdatei schreibt, bzw. als E-Mail 
an mich versendet.

Soweit als Anregung. Vielleicht gibt es noch bessere Vorschläge, bzw. 
Hinweise auf fertige Funktionssammlungen oder Klassen. Würde mich 
interessieren.

Viele Grüße

Peter
-- 
http://www.media-palette.de/


php::bar PHP Wiki   -   Listenarchive