heinzi: Sql-Abfrage mit php-Variabler

Hi zusammen,
ich würde gerne eine php-variable meine sql-Abfrage mit einbauen.
Leider bekomme ich immer syntax-fehler...

Die Abfrage soll (deutlich vereinfacht so aussehen:

const sql = "SELECT * FROM table WHERE blabla = $var ORDER BY..."

jetzt habe ich schon versucht über verkettung die $var einzubauen:

const sql = "SELECT * FROM table WHERE blabla = ".$var."ORDER BY..."

oder auch

const sql = "SELECT * FROM table WHERE blabla = '$var' ORDER BY..."

Ich bekomme bei jeder Variante eine syntaxmeldung, dass irgendetwas nicht mit den Anführungszeichen stimmt...

Wie baue ich den Spass ein??

danke, gruß heinzi

  1. Hallo heinzi,

    Das Prinzip ist schon fast richtig, ich kommentiere mal dazwischen..
    das const würd ich allerdings bei sowas konstant weglassen!!

    1. $sql = "SELECT * FROM table WHERE blabla = $var ORDER BY..."
    2. $sql = "SELECT * FROM table WHERE blabla = ".$var."ORDER BY..."
    prinzipiell richtig, wobei das so nur geht, wenn es sich um Zahlen, also z.B. int()-Werte handelt. Bei Strings brauchst du die einfachen Häkchen. Variante 2 ist auch schöner...
    also
    2. neu:
    $sql = "SELECT * FROM table WHERE blabla = '". $var ."' ORDER BY xyz"

    3. $sql = "SELECT * FROM table WHERE blabla = '$var' ORDER BY..."
    // sollte eigentlich funktionieren.

    Lass dir evtl mit mysql_error() mal ausgeben, um zu sehen, wo der Fehler wirklich liegt... evtl hast ja auch nen Buchstabendreher oder so drin...

    Gruß Patrick

    1. danke, aber variante 2 sorgt bei mir für:

      Parse error: syntax error, unexpected '.', expecting ',' or ';' in C:\xampp\htdocs\w....

      variante 3 auch...

      ich bin echt am Verzweifeln...

      wenn ich aus der const eine var $query mache, dann bekomme ich folgenden Fehler:

      Parse error: syntax error, unexpected '"' in C:\xampp\htdocs\webs

      1. danke, aber variante 2 sorgt bei mir für:
        Parse error: syntax error, unexpected '.', expecting ',' or ';' in C:\xampp\htdocs\w....

        Laß dir die Query ausgeben und poste sie hier rein.

        variante 3 auch...

        Laß dir die Query ausgeben und poste sie hier rein.

        wenn ich aus der const eine var $query mache, dann bekomme ich folgenden Fehler:

        Parse error: syntax error, unexpected '"' in C:\xampp\htdocs\webs

        Laß dir..., na du weißt schon.

        ~JJ

        1. sorry, aber was meinst Du mit "Lass dir den query ausgeben"??

          die Abfrage ist doch mein Problem...

          meinst du mysql_error(), um den genauen Fehler zu finden??

          dann weiss ich nicht wo ich den einsetzen soll, weil ich die Ausgabe in einem Template habe und die Abfragen, vars und consts und fkts alle in einer klasse.

          also bringt mich das im moent nicht weiter, oder?

          danke, heinzi

          1. sorry, aber was meinst Du mit "Lass dir den query ausgeben"??

            echo($sql);

            1. sorry, aber was meinst Du mit "Lass dir den query ausgeben"??

              echo($sql);

              Ok, dass hatte ich mir ja schon gedacht.
              Aber das Problem ist ja, wie bereits geschrieben, dass ich mir über einen einstiegspunkt Funktionen etc. aus einer Klasse in ein Template ziehe.
              (savant like)

              Sobald die Klasse mit allem wichtigen gedöns herangezogen wird gibts ne Fehlermeldung, daher macht es weder Sinn eine Ausgabe der Abfrage ins template zu schreiben, noch in eine funktion die ich über die klasse nutze.

              Habe ich mich da verständlich ausgedrückt oder muß ich es nochmal versuchen?;-)

              wenn das ganze keine SQL_Fehlermeldung ist, sondern eine PHP-meldung, dann
              wundert mich, dass das Skript ohne $var läuft und fröhlich ausgibt...

              ZUm Thema sql_injection: Die Variable wird vorher an anderer Stelle in der Klasse überprüft.

              vieleicht habe ich jetzt aber auch inzwischen ein HammerBrett vorm Kopf...wer weiss das schon;-)

              gruß heinzi, danke

          2. Hallo

            sorry, aber was meinst Du mit "Lass dir den query ausgeben"??

            wie gibst Du mit PHP eine Zeichenkette aus?

            dann weiss ich nicht wo ich den einsetzen soll, weil ich die Ausgabe in einem Template habe und die Abfragen, vars und consts und fkts alle in einer klasse.

            An einer geeigneten Stelle, wo das SQL-Statement bereits fertig ist.

            also bringt mich das im moent nicht weiter, oder?

            Selbstverständlich bringt Dich das weiter.

            Freundliche Grüße

            Vinzenz

          3. also bringt mich das im moent nicht weiter, oder?

            http://www.php.net/manual/de/function.set-error-handler.php kennst du?

            1. echo $begrüßung;

              also bringt mich das im moent nicht weiter, oder?
              http://www.php.net/manual/de/function.set-error-handler.php kennst du?

              Das hilft nicht gegen PHP-Syntax-Fehler. Bei einem solchen Fall kann das Script nicht ausgeführt werden. Ein eigener Errorhandler, der im Script gesetzt wird, kommt damit gar nicht zum Zug. Auch MySQL-Fehler sind vom Errorhandler nicht betroffen. Allenfalls Folgefehler können damit gefangen werden, die im PHP-Kontext auftreten, wenn eine Signalisierung eines MySQL-Fehlerzustands über das Ergebnis der verwendeten Funktion ignoriert wurde.

              echo "$verabschiedung $name";

              1. das sehe ich auch so;-)

                aber was kann ich dann machen?

                wie kommeich dann an den Fehler ran?

                danke, gruß h.

                1. echo $begrüßung;

                  das sehe ich auch so;-)
                  aber was kann ich dann machen?
                  wie kommeich dann an den Fehler ran?

                  Prüfe die PHP-Syntax. Dabei können wir dir nicht helfen, wenn wir den Code nicht sehen. Es kann aber ein Editor mit Syntaxhervorhebung helfen. Noch besser (aber vielleicht für ein einfaches Projekt überdimensioniert) wäre eine IDE à la Zend Studio oder Eclipse mit PHP-Plugin oder PHPEdit usw. PHP-IDEs zeigen im Allgemeinen Syntaxfehler schon beim Tippen an.

                  Die Ursachen für Syntaxfehler liegen meistens (deutlich) vor der angezählten Stelle. Wenn beispielsweise irgendwo ein String nicht richtig beendet wurde, erzeugt ein ' bzw. " eben dieses anderswo fehlende Ende. Der Inhalt des neuen Strings wird dann als PHP-Code betrachtet, was eine Weile lang gut gehen kann, weil er zufällig den Regeln entspricht, aber irgendwann nicht mehr.

                  echo "$verabschiedung $name";

                  1. hmmmm..., arbeite mit Aplpha Code Studio.
                    Des hat ne Syntaxhervorhebung, alelrding wird die komplette zeile hervorgehoben und das bringt mir hal nicht viel...

                    ich habe schon probiert die Abfrage an einen anderen Platz in der Klasse zu packen um zu sehen ob der fehler sich doch woanders outet...

                    dann verschiebt sich der fehler aber auch nur wieder in die Abfragezeile, was meines Erachtens bedeutet, dass der fehler auch wirklich in der zeile liegt...

                    noch irgendeine Idee???

                    danke, gruß Heinzi

                    1. echo $begrüßung;

                      hmmmm..., arbeite mit Aplpha Code Studio.
                      Des hat ne Syntaxhervorhebung, alelrding wird die komplette zeile hervorgehoben und das bringt mir hal nicht viel...

                      Das hört sich erstmal so an, als ob sie komplett als String erkannt wird. Hervorheben kann man ja auch viele Weise. Wie sieht denn die Hervorhebung aus, und welchen syntaktischen Elementen wurde diese Art der Hervorhebung zugewiesen?

                      noch irgendeine Idee???

                      Nochmal genau hinschauen, Zeichen für Zeichen abgrasen ... Apropos, ich habe nochmal genauer in dein Ausgangsposting gesehen. Da steht

                      const sql = "SELECT * FROM table WHERE blabla = ".$var."ORDER BY..."

                      const gibt es nur im Zusammenhang mit Klassen. Und beim Definieren einer Klassenkonstanten dürfen nur konstante Ausdrücke verwendet werden, da dieser zur Compile-Zeit berechnet und zugewiesen wird. Variableninhalte sind erst zur Laufzeit verfügbar, können also nicht in einer Klassenkonstantendefinition verwendet werden.

                      echo "$verabschiedung $name";

              2. http://www.php.net/manual/de/function.set-error-handler.php kennst du?
                Das hilft nicht gegen PHP-Syntax-Fehler.

                Jaja, geb mich geschlagen.

      2. echo $begrüßung;

        danke, aber variante 2 sorgt bei mir für:
        Parse error: syntax error, unexpected '.', expecting ',' or ';' in C:\xampp\htdocs\w....

        Das ist eine Fehlermeldung von PHP. Dein Problem ist also nicht die SQL-Syntax sondern die des PHP-Scripts.
        SQL-Syntax-Fehler bekommt man nicht einfach so angezeigt. Dazu mus man das Funktionsergebnis von mysql_query() auswerten und beim Signalisieren eines Fehlers den dazugehörigen Meldungstext mit mysql_error() abholen.

        echo "$verabschiedung $name";

    2. echo $begrüßung;

      1. neu:
        $sql = "SELECT * FROM table WHERE blabla = '". $var ."' ORDER BY xyz"
      2. $sql = "SELECT * FROM table WHERE blabla = '$var' ORDER BY..."

      Beide Varianten scheinen richtig zu sein, sind es aber vermutlich nicht. Sie sind anfällig gegen SQL-Injection, falls dagegen nicht an anderer Stelle Maßnahmen ergriffen worden sind.

      echo "$verabschiedung $name";

      1. Hello,

        $sql = "SELECT * FROM table WHERE blabla = '". $var ."' ORDER BY xyz"
        3. $sql = "SELECT * FROM table WHERE blabla = '$var' ORDER BY..."

        Beide Varianten scheinen richtig zu sein, sind es aber vermutlich nicht. Sie sind anfällig gegen SQL-Injection, falls dagegen nicht an anderer Stelle Maßnahmen ergriffen worden sind.

        Auch wenn der Wert nicht von außen käme, wären sie immer noch anfällig gegen schädliche Daten, denn die Variable wird ja vom Parser ersetzt, bevor die Übergabe an die SQL-Schnittstelle stattfindet. Wenn nun x-beliebige Daten in $var stehen können (z.B. ein Bild), dann zerschießt dies höchstwahrscheinlich das SQL-Statement.

        https://forum.selfhtml.org/?t=171572&m=1123378

        Ein harzliches Glückauf

        Tom vom Berg

        --
        Nur selber lernen macht schlau
        http://bergpost.annerschbarrich.de