mysql_query macht mich verrückt
gurle
- php
0 Der Martin0 Vinzenz Mai0 gurle0 Der Martin0 gurle
0 Vinzenz Mai0 gurle
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
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
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
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...
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
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
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 vonshow = '0'
ist.
ich sehe da kein fehler...
Ich sehr wohl: SHOW ist im SQL-Dialekt von MySQL ein reserviertes Wort.
Freundliche Grüße
Vinzenz
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 vonshow = '0'
ist.ich sehe da kein fehler...
Ich sehr wohl: SHOW ist im SQL-Dialekt von MySQL ein reserviertes Wort.
Freundliche Grüße
Vinzenz
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