osCommerce SQL2YAML

sql2yaml.php ist eine PHP-Datei für osCommerce, an die man SQL-Anweisungen übergeben kann. Das Ergebnis wird als YAML-String zurück gegeben.

Wichtig

Diese PHP-Datei wurde vor ein paar Jahren getestet und eingesetzt. Es kann leicht sein, dass sie mit neueren osCommerce-Versionen nicht mehr funktioniert.

sql2yaml.php:

<?php
  /*
   Beim Aufruf dieser Datei kann der Parameter "sql" mit einer
   SQL-Anweisung uebergeben werden. Das Ergebnis der Abfrage wird
   als YAML-Datei zurueck gegeben.

   By Gerold Penz

   Released under the GNU General Public License
  */

  /*
   Vorbereitungen treffen
  */
  if (file_exists('includes/local/configure.php')) include('includes/local/configure.php');
  require('includes/configure.php');
  require(DIR_WS_FUNCTIONS . 'database.php');

  /*
   Zur Datenbank verbinden und SQL-Anweisung ausfuehren
  */
  tep_db_connect() or die('Unable to connect to database server!');
  $sql = (isset($HTTP_GET_VARS['sql']) ? $HTTP_GET_VARS['sql'] : '');
  $sql = str_replace("\\", "", $sql);
  $result = tep_db_query($sql);

  if ($result != 1) {
    // Feldanzahl auslesen
    $fields_count = mysql_num_fields($result);

    // Metadaten auslesen
    $i = 0;
    while ($i < $fields_count) {
      $field_meta = mysql_fetch_field($result, $i);
      $meta[$i] = $field_meta;
      $i++;
    }

    // Werte abfragen, mit Feldnamen kombinieren und ausgeben
    $first = 1;
    while($row = mysql_fetch_row($result)){
      if ($first = 1) {
        $first = 0;
        print_r("---\n");
      }
      $i = 0;
      while ($i < $fields_count) {
        $key = $meta[$i]->name;
        $value = $row[$i];
        if ($value == "") {
          $value = "~";
        } elseif ($meta[$i]->type == "datetime" and $value != "") {
          $value = "!timestamp " . $value . ".00";
        }
        if ($i == 0) {
          print_r("- " . $key . ": " . $value . "\n");
        } else {
          print_r("  " . $key . ": " . $value . "\n");
        }
        $i++;
      }
    }
  } else {
    print_r("NO_RESULT");
  }

?>

Installation

Die Installation ist relativ einfach. Man muss nur eine Datei in den Admin-Bereich des osCommerce-Shops hoch laden.

Vorsicht!

Es ist wichtig, dass niemand von Außen ohne Passwort auf diese Datei zugreifen kann. Deshalb solltest du diese Datei in den Admin-Bereich kopieren. Dieser Bereich muss sowiso mindestens per .htaccess mit Benutzername und Passwort geschützt werden, ansonsten könnte jeder die Shopdaten einsehen und ändern.

Datei kopieren

Die Datei sql2yaml.php muß in den Admin-Ordner des Shops.

sql2yaml.php --> http://localhost/catalog/admin/

Auf Funktion testen

Zum Testen gibst du die URL http://localhost/catalog/admin/sql2yaml.php?sql=SELECT countries_name FROM countries LIMIT 0, 3 in die Adresszeile deines Browsers ein und bestätigst sie mit Enter. Die URL muss natürlich an deinen Shop angepasst werden. Das Ergebnis sollte ungefähr so aussehen:

---
-
  countries_name: Afghanistan
-
  countries_name: Albania
-
  countries_name: Algeria

Im Browser wird natürlich alles nebeneinander angezeigt. Wenn du dir den Quelltext anzeigen lässt, dann siehst du als Ergebnis die Yaml-Struktur.

Verwenden

Python bringt alles mit, um damit den osCommerce-Server warten zu können. Mit urllib2 kann man den HTTP-Request absenden und die Rückgabe empfangen. Und mit PyYAML kann man den YAML-String parsen und in Python-Datentypen umwandeln.