gurle: mysql_query macht mich verrückt

guten abend,

ich habe diesen query

$query = @mysql_query("SELECT ".$this->mylinkname.", ".$this->mylink." FROM ".$this->mytable1." WHERE ".$this->mymenuitem." = 'nav' AND ".$this->myshow." = '0' ORDER BY ".$this->mymenusequence." ASC LIMIT 0,6");

irgendwo zwischen AND ".$this->myshow." = '0' ORDER BY steckt der wurm im syntax , ich sehe es nicht. würde mich freuen, wenn jemand mir die augen öffnet

schönen abend noch
gurle

  1. Hallo,

    $query = @mysql_query("SELECT ".$this->mylinkname.", ".$this->mylink." FROM ".$this->mytable1." WHERE ".$this->mymenuitem." = 'nav' AND ".$this->myshow." = '0' ORDER BY ".$this->mymenusequence." ASC LIMIT 0,6");

    lass dir als erstes mal den zusammengesetzten Query-String anzeigen. Möglicherweise siehst du dann schon einen offensichtlichen Fehler. So, nur aus dem Bauplan und ohne zu wissen, welche Werte hier tatsächlich eingesetzt werden, ist es unmöglich.

    Das einzige, was man hier erkennt: Du fügst Variableninhalte ohne Berücksichtigung der notwendigen kontextspezifischen Maskierung in ein SQL-Statement ein. Das kann von ärgerlich bis gefährlich alles sein.

    steckt der wurm im syntax

    "in _der_ Syntax". Außerdem ist die Aussage falsch: Syntax ist die Lehre vom richtigen Satzbau, die auch auf Programmiersprachen übertragen wird und hier die formale Definition einer richtigen und gültigen Anweisung beschreibt. Die ist sicher richtig.
    Was du meinst: In deinem Statement steckt ein syntaktischer Fehler.

    würde mich freuen, wenn jemand mir die augen öffnet

    Dann fang mal an, indem du dir zunächst anschaust, was du *wirklich* hast.

    Ciao,
     Martin

    --
    Wer keiner Fliege etwas zuleide tut, darf sich nicht über die Maden im Fleisch wundern.
    Selfcode: fo:) ch:{ rl:| br:< n4:( ie:| mo:| va:) de:] zu:) fl:{ ss:) ls:µ js:(
  2. Hallo,

    ich habe diesen query

    das ist ein PHP-Statement, kein SQL.

    $query = @mysql_query("SELECT ".$this->mylinkname.", ".$this->mylink." FROM ".$this->mytable1." WHERE ".$this->mymenuitem." = 'nav' AND ".$this->myshow." = '0' ORDER BY ".$this->mymenusequence." ASC LIMIT 0,6");

    a) Baue das SQL-Statement in einer Variablen zusammen,
    b) Beachte den Kontextwechsel, sowohl bei Werten als auch Feldbezeichnern.
    c) Lass Dir das zusammengebaute Statement zu Debugzwecken anzeigen.
    d) Solange es nicht läuft, unterdrücke nicht die Fehlermeldungen.
    e) Implementiere eine für Deine Anwendung sinnvolle Fehlerbehandlung,
       mysql_query() kann trotz korrekter SQL-Anweisung aus anderen Gründen
       fehlschlagen.

    Freundliche Grüße

    Vinzenz

    1. hallo,

      ich finde da keinen fehler, das statement sieht so aus:

      SELECT linkname, link FROM table WHERE menuitem = 'nav' AND show = '0' ORDER BY sequence ASC LIMIT 0,6

      "echo mysql_error();" sagt aber gerade, dass der fehler in der nähe von show = '0' ist.

      ich sehe da kein fehler...

      1. Hi,

        SELECT linkname, link FROM table WHERE menuitem = 'nav' AND show = '0' ORDER BY sequence ASC LIMIT 0,6
        ich sehe da kein fehler...

        ich schon: table (gern auch großgeschrieben: TABLE) ist ein reserviertes Schlüsselwort in SQL.

        Ciao,
         Martin

        --
        Alleine sind wir stark ...
        gemeinsam sind wir unausstehlich!
        Selfcode: fo:) ch:{ rl:| br:< n4:( ie:| mo:| va:) de:] zu:) fl:{ ss:) ls:µ js:(
        1. hallo martin,

          naja, den table habe ich als platzhalter dort hingeschrieben. meine tabelle heißt anders. also kann es auch daran nicht liegen.

          wenn ich z.b. diesen query sende:
          SELECT linkname, link FROM table WHERE menuitem = 'nav' ORDER BY sequence ASC LIMIT 0,6
          klappt es.

          ich verstehe nur nicht was beim "AND" so falsch ist.

          Hi,

          SELECT linkname, link FROM table WHERE menuitem = 'nav' AND show = '0' ORDER BY sequence ASC LIMIT 0,6
          ich sehe da kein fehler...

          ich schon: table (gern auch großgeschrieben: TABLE) ist ein reserviertes Schlüsselwort in SQL.

          Ciao,
          Martin

      2. Hallo,

        ich finde da keinen fehler, das statement sieht so aus:

        SELECT linkname, link FROM table WHERE menuitem = 'nav' AND show = '0' ORDER BY sequence ASC LIMIT 0,6

        ich gehe davon aus, dass Du den tatsächlichen Tabellennamen gegen den Platzhalter "table" ausgetauscht hast. Das ist keine besonders gute Idee, denn ein Fehler könnte sich auch im Tabellennamen verbergen, siehe Martins Hinweis.

        "echo mysql_error();" sagt aber gerade, dass der fehler in der nähe von show = '0' ist.

        ich sehe da kein fehler...

        Ich sehr wohl: SHOW ist im SQL-Dialekt von MySQL ein reserviertes Wort.

        Freundliche Grüße

        Vinzenz

        1. hallo vinzenz,

          danke das wars. daran habe ich nicht gedacht. danke

          gurle

          Hallo,

          ich finde da keinen fehler, das statement sieht so aus:

          SELECT linkname, link FROM table WHERE menuitem = 'nav' AND show = '0' ORDER BY sequence ASC LIMIT 0,6

          ich gehe davon aus, dass Du den tatsächlichen Tabellennamen gegen den Platzhalter "table" ausgetauscht hast. Das ist keine besonders gute Idee, denn ein Fehler könnte sich auch im Tabellennamen verbergen, siehe Martins Hinweis.

          "echo mysql_error();" sagt aber gerade, dass der fehler in der nähe von show = '0' ist.

          ich sehe da kein fehler...

          Ich sehr wohl: SHOW ist im SQL-Dialekt von MySQL ein reserviertes Wort.

          Freundliche Grüße

          Vinzenz

          1. Hallo,

            danke das wars. daran habe ich nicht gedacht. danke

            schön, dass Du Dein akutes Problem behoben hast.

            Es ist eine gute Idee, alle Tabellen- und Spaltennamen in generiertem SQL-Code immer so zu maskieren, wie das Datenbankmanagementsystem das gerne hätte - wie es zum Beispiel phpMyAdmin macht. Maskiere immer und überall. Das spart Dir die Mühe zu überlegen, ob Du auf das Maskieren verzichten kannst und gegebenenfalls eine zeitaufwendige Fehlersuche.

            Freundliche Grüße

            Vinzenz