Ankündigung

Einklappen
Keine Ankündigung bisher.

[Erledigt] SQL Abfrage aus db laden uns ausführen

Einklappen

Neue Werbung 2019

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

  • [Erledigt] SQL Abfrage aus db laden uns ausführen

    Hallo,
    mein erster post hier. Wollte mich kurz vorstellen: Bin Gelegenheitsprogrammier mit IT background von ca. 15 Jahren.

    Innerhalb meiner php App habe ich ein mini Contensystem (steuert Darstellung von HTML und Grafiken entsprechend Eintrag in einem DB Table (Mysql)).
    Um flexible zu bleiben lege ich auch die SQL sripte in der DB ab, lade diese beim rendern des Contens und zeige das Ergebnis dann an. Soweit so gut.

    Um es perfekt zu machen muss ich allerdings auch variablen in das sql sript mit aufnehmen welche zur Laufzeit durch aktuelle Werte esetzt werden sollen zB. so:

    select * from table1 where userid = $actual_user

    Solange ich echte Zahlen im script benutze geht alles. Sobald ich Variabelen / functionen einsetze geht es nicht mehr und es kommt ein sql error.

    Ich habe auch schon probiert das script so in der db abzuspeichern:
    select * from table1 where userid = ".$actual_user." and ...
    select * from table1 where userid = '.$actual_user.' and ...

    Das SQl Statatement befindet sich in einem Feld vom Typ TEXT in der db

    Jemand eine Idee / Hinweis / Erfahrungswert?


  • #2
    Du speicherst Querys in der Datenbank?!

    Btw: Platzhalter zu ersetzen ist nicht wirklich ein fortgeschrittenes Thema...

    Code:
    select * from table1 where userid = ".$actual_user." and ...
    select * from table1 where userid = '.$actual_user.' and ...
    Du konkatenierst mit "." damit PHP die Strings zusammenhängt. Wenn du bereits einen String hast und Platzhalter ersetzen willst hat der . darin nichts mehr zu suchen.
    Zitat von nikosch
    Macht doch alle was Ihr wollt mit Eurem Billigscheiß. Von mir aus sollen alle Eure Server abrauchen.

    Kommentar


    • #3
      Content. Es heißt Content.
      --

      „Emoticons machen einen Beitrag etwas freundlicher. Deine wirken zwar fachlich richtig sein, aber meist ziemlich uninteressant.
      Wenn man nur Text sieht, haben viele junge Entwickler keine interesse, diese stumpfen Texte zu lesen.“


      --

      Kommentar


      • #4
        Zitat von tkausl Beitrag anzeigen
        Du speicherst Querys in der Datenbank?!

        Btw: Platzhalter zu ersetzen ist nicht wirklich ein fortgeschrittenes Thema...

        Code:
        select * from table1 where userid = ".$actual_user." and ...
        select * from table1 where userid = '.$actual_user.' and ...
        Du konkatenierst mit "." damit PHP die Strings zusammenhängt. Wenn du bereits einen String hast und Platzhalter ersetzen willst hat der . darin nichts mehr zu suchen.
        Hi tkausl, danke für Deine Kommentare. Wie geschrieben ist es erforderlich das SQL Statement in einer Tabelle zu speichern um den Content flexibel zu rendern. Das geht auch solange keine Variablen enthalten sind. Falls Du einen Hinweis, Erfahrungswerte dazu hast, nehme ich gerne.

        Kommentar


        • #5
          Wie geschrieben ist es erforderlich das SQL Statement in einer Tabelle zu speichern um den Content flexibel zu rendern.
          Wieso ist das erforderlich?
          http://hallophp.de

          Kommentar


          • #6
            Zitat von Asipak Beitrag anzeigen
            Wieso ist das erforderlich?
            Ich habe 3-4 pages welches einen dynamischen Content haben.
            Damit ich diesen nicht per Hand ständig pflegen muss, mache ich das dynamisch über eine Tabelle und einen Renderer Klasse. Dieser erstellt pro Tabelleneintrag einen Section / Abschnitt auf den Pages dynamisch (Abhängig vom Datenstand anderer Tabellen (viel Statistk) und wer gerade die Seite aufruft (also User getrieben). Neben Text und Tabellen werden auch charts erzeugt. Dies alles macht der Renderer zur Laufzeit. Getrieben wird das ganze flexible über die Tabelleneinträge. Aus diesem Grund liegen für diesen Teil der Anwendung (und nur für diesen) die SQL Statements in der Tabellen (Zusammen mit den Formatanweisungen für den zu rendernden Abschnitt).

            Und nun kommt mein Problem:
            wenn ich asuführe:

            PHP-Code:
            $sql"Select * from Tabelle1 where user_id="$current_user 
            ist alles prima.
            Stelle ich das o.g. Statement in die Tabelle und lade es zur Laufzeit durch den renderer:

            PHP-Code:
            $sql exec_sql("select sql_stm from template where section_id=1"
            dann stehet in $sql genau das gleiche wie im ersten Beispiel. Wenn ich das Staement nun ausführe erkennt php nicht das in dem Text String nun noch eine Variabele zu Laufzeit mit dem Echtwert zu ersetzen ist.

            Das genau ist mein Problem. Hoffe das ist nun soweit verständlich

            Kommentar


            • #7
              Ganz verstanden warum man das macht habe ich noch nicht und schön finde ich das auch nicht.
              Aber ich denke, dass dir vielleicht die Funktion sprintf weiterheflen kann.

              Kommentar


              • #8
                Zitat von Kinger Beitrag anzeigen
                Ganz verstanden warum man das macht habe ich noch nicht und schön finde ich das auch nicht.
                Aber ich denke, dass dir vielleicht die Funktion sprintf weiterheflen kann.
                Leider nein. Der PHP parser führt keine Funktionen und Variablene aus geladenen SQL Statements aus.

                Kommentar


                • #9
                  Kann man nicht gespeicherte Prozeduren anlegen und statt der Query selbst, den Namen der Prozedur auszuführenden Prozedur abspeichern? Und die Variable dann als Parameter übergeben.
                  Relax, you're doing fine.
                  RTFM | php.de Wissenssammlung | Datenbankindizes | Dateien in der DB?

                  Kommentar


                  • #10
                    Zitat von gregor4711 Beitrag anzeigen
                    Leider nein. Der PHP parser führt keine Funktionen und Variablene aus geladenen SQL Statements aus.
                    Tut mir leid, deine Antwort verstehe ich nicht. Was genau meinst du?

                    Also wie ich dich verstanden habe, hast du vordefinierte SQL-Statements in deiner DB gespeichert. Diese sollen nun noch mit Variablen befüttert werden. Eventuell für jeden Aufruf neu.

                    Denke schon, dass das mit sprintf geht. (Glaube auch, dass auf sowas tkausl hinaus wollte -> Platzhalter ersetzen)

                    Mal zum Ablauf, wie ich das verstanden habe (bereits auf sprintf ausgelegt):

                    1. In deiner DB ist folgendes SQL-Statement als String gespeichert:
                    PHP-Code:
                    select from table1 where userid = %
                    2. Du läds den String aus der DB und Speicherst ihn auf eine Variable. Das ergibt dann zB:
                    PHP-Code:
                    $sql "select * from table1 where userid = %d"
                    3. Dann setzt du deine Variable ein:
                    PHP-Code:
                    $sql sprintf($sql$actual_user); 
                    Dabei entsteht folgende Statement (Wenn $actual_user = 1):
                    PHP-Code:
                    select from table1 where userid 
                    4. Nun kannst du dein SQL-Statement raushauen und solltest das zu erwartende Ergebnis bekommen.

                    So habe ich das jetzt verstanden. Wenn ich völlig daneben liege, dann konkretisiere bitte deine Anfrage nochmal.

                    Kommentar


                    • #11
                      Hi Klinger,
                      danke für die Beispiele.
                      Ich probiere dass gleich mal aus. Wenn das so geht wie Du es beschreibst, sollte dies die Lösung für mein Problem sein.
                      Danke soweit, ich melde mich noch einmal

                      Kommentar


                      • #12
                        es läuft!!!!

                        Charts, Tabellen, alles da.
                        Besten Dank für das Beispiel, hat mir sehr geholfen!

                        Kommentar


                        • #13
                          Prima. Dann das Thema bitte als Erledigt makieren, falls noch nicht geschehen.

                          Kommentar

                          Lädt...
                          X