Ankündigung

Einklappen
Keine Ankündigung bisher.

Queries dynamisch um Tabellen Präfixe erweitern

Einklappen

Neue Werbung 2019

Einklappen
X
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • Queries dynamisch um Tabellen Präfixe erweitern

    Hallo.

    Ich suche nach einem guten Weg, meine SQL-Queries um ein
    Tabellen-Prefix zu erweitern.

    Die Queries werden an das MySql-Objekt in folgender Form übergeben:
    PHP-Code:
    <?php
    MySqlConnection
    ::query(string $sQuery, array $aValues null);
    ?>
    Das Objekt escaped dann die Werte und substituiert die Platzhalter in der
    Query via vsprintf().

    Nun will ich eben ein Tabellen-Präfix hinzufügen und hab natürlich wenig
    Interesse, dieses in der Form von
    PHP-Code:
    <?php
    $sQuery 
    "SELECT foo FROM {$this->Config->get('MySql''prefix')}table WHERE foo = '%s'";
    ?>
    in die Queries einzubauen.

    Mein spontaner Ansatz wäre, die Tabellennamen in geschweifte Klammern
    oder so zu setzen und im MySql-Objekt via preg_replace() um das Präfix
    zu erweitern. Da ich aber nicht fit bin, was den Sprachumfang von SQL
    angeht, wollte ich hier mal anfragen, ob sich geschweifte Klammern hierzu
    eignen, oder ob das Konflikte geben kann. Wie gesagt, die Werte der
    Query werden in dieser nicht mitübergeben. Dort stehen also nur
    SQL-Ausdrücke, Tabellennamen, Aliase und Attribut-Bezeichner (...was
    noch?).

    Oder gib es andere bewährte Wege, das zu tun, vielleicht ohne auf
    RegExps zugreifen zu müssen?

    Basti

  • #2
    Stell dir vor jemand schreibt in einem Gästebuch eintrag {ohha} dann wird aus deinem Query ein "prefix_ohha" z.B.

    Ich habe bei meiner DB Klasse halt eine Funktion prefix() wie du es eben beschrieben hast.
    PHP-Code:
    <?php
    $query 
    "SELECT * FROM ".$db->prefix()."tabelle"
    ?>

    Kommentar


    • #3
      Wie gesagt, die Werte werden in einem Array dem MySQL-Objekt übergeben. In der Query selbst
      stehen nur Platzhalter (%s).

      PHP-Code:
      $sQuery "
          SELECT
              date,
              entry

          FROM
              guestbook

          WHERE
              author = '%s';
      "
      ;

      $this->Connection->query($sQuery, array('{Herbert}')); 
      Das wäre also kein Problem.

      Basti

      Kommentar


      • #4
        Dann könntest du es wohl so machen.

        Kommentar

        Lädt...
        X