1. Diese Seite verwendet Cookies. Wenn du dich weiterhin auf dieser Seite aufhältst, akzeptierst du unseren Einsatz von Cookies. Weitere Informationen

SQL Abfrage mit Variablen

Dieses Thema im Forum "Web-Programmierung" wurde erstellt von TaTonka, 13.05.08.

  1. TaTonka

    TaTonka Neuer Berner Rosenapfel

    Dabei seit:
    19.03.06
    Beiträge:
    1.961
    Nachdem es bei mir lange Zeit gut ging, ohne Probleme in allen Scripten, mault mein PHP Interpreter in einem einzigen Script bei einer einzigen Query rum. Ich kanns weder erklären, noch beheben.

    Die fraglichen Zeilen sind:
    Code:
    $tag_query = "SELECT * FROM tags WHERE tag = $tags";
    
    Hier ruft er zwar den Wert $tags wunderbar ab, aber versucht dann, auf ein Datenfeld namens wert_von_$tags zuzugreifen. Das hat er sonst noch nie gemacht.

    Wenn ich dann $tags in Hochkommata packe, um das ganze als String zu definieren, kommt folgender Fehler:

    "You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '' at line 1".

    Ich kann mir ernsthaft nicht erklären, warum alle anderen Querys so fein ablaufen, nur hier eine einzige so Stress macht.

    Achja: Die Zuweisung für $tags ist:
    Code:
    $tags = mysql_real_escape_string($_GET['tag']);
    Und es wird natürlich vorher erst geprüft, ob es $_GET['tag'] überhaupt gibt.
     
  2. ins0m

    ins0m Gloster

    Dabei seit:
    05.10.07
    Beiträge:
    61
    wenn du deine Variable wie erwähnt in Hochkommata packst, hast du dann vor dem zeichen ein \ gesetzt ?
    (also \" bzw \' ) ?
     
  3. TaTonka

    TaTonka Neuer Berner Rosenapfel

    Dabei seit:
    19.03.06
    Beiträge:
    1.961
    öh...nö. aber die query an sich in doppelte, und die variable in einfache.
     
  4. Hobbes_

    Hobbes_ Gast

    Ich versteh leider nicht genau, was Du mit der Umschreibung wert_von_$tags genau ausdrücken möchtest (ein konkretes Beispiel wäre fein). Gelegentlich helfen jedoch geschweifte klammern um den Parameter, dem Interpreter, die gewollte Ordnung besser zu erkennen.

    Bsp.: {$tags}

    Doch wie gesagt hilft ein Beispiel wohl weiter.
     
  5. tjp

    tjp Baldwins roter Pepping

    Dabei seit:
    07.07.04
    Beiträge:
    3.247
    Warum nicht einfach so?
    Code:
    $tag_query = "SELECT * FROM tags WHERE tag = ". $tags;
    
     
  6. TaTonka

    TaTonka Neuer Berner Rosenapfel

    Dabei seit:
    19.03.06
    Beiträge:
    1.961
    naja, das war nur ne umschreibung, z.B. wenn $tags gerade "beispiel" wäre, würde er versuchen, das feld "beispiel" nach irgendwas abzusuchen. er sollte aber stattdessen das feld tag nach "beispiel" absuchen.

    tjp: gute idee, geht aber nicht. wieder unknown column in where clause.
     
  7. tjp

    tjp Baldwins roter Pepping

    Dabei seit:
    07.07.04
    Beiträge:
    3.247
    Geht es so?
    Code:
    $tag_query = "SELECT * FROM tags WHERE tag = '".$tags."'";
    
     
  8. Hobbes_

    Hobbes_ Gast

    Das tönt sehr danach, dass Du irgendeine Automatik aktiviert hast, welche Parameter direkt aktiviert. Da verwechselt er tags mit $tags. Da gab es doch mal eine Option... Solche Dinge sind bei mir immer ausgeschaltet, deshalb weiss ich jetzt nicht gerade, welche das ist... Mmh.

    Welche Version PHP hast Du am laufen?
     
  9. TaTonka

    TaTonka Neuer Berner Rosenapfel

    Dabei seit:
    19.03.06
    Beiträge:
    1.961
    quote-fehler.

    eh, die aktuellste. ka, welche das ist. ich achte da nie so drauf.

    und das sonderbare ist ja, das in allen anderen scripten, die auf dem gleichen server liegen, abfragen dieser art ohne probleme klappen
     
  10. ins0m

    ins0m Gloster

    Dabei seit:
    05.10.07
    Beiträge:
    61
    Also auch nach längerem nachdenken wirkt das alles auf mich nicht gerade schlüssig.
    Deswegen gib uns doch mal etwas mehr Php-Code und gib uns ein paar Infos über die variable $tags. Wie wird hinterher mit dem String umgegangen ? ein normales Query ?

    Wenn er ein Feld namens "Inhalt von tags" durchsucht springt einem doch unweigerlich die Benennung bei der Abfrage ins Auge (tags, tag und $tags). Das muss natürlich nichts heißen aber irgendwie springt es einem doch ins Auge... Achja : nach was sucht er denn in dem gegebenen Fall im feld "inhalt von tags" denn ? Das würde mich ja interessieren !
     
  11. TaTonka

    TaTonka Neuer Berner Rosenapfel

    Dabei seit:
    19.03.06
    Beiträge:
    1.961
    Code:
    require_once('includes/config.inc.php');
    include('frameset/top.php');
    echo '<table width="90%" align="center">';
    $linkarr = array();
    
    if (!$_GET['tag']==""){
    $tags = mysql_real_escape_string($_GET['tag']);
    
    
    $tag_query = "SELECT * FROM tags WHERE tag = '".$tags."'";
    echo $tag_query;
    $tag_result = mysql_query($tag_query) OR die(mysql_error());
    $tag_data = mysql_fetch_assoc($result);
    $tagid = $tag_data['id'];
    $link_query = "SELECT linkid FROM conntagsli WHERE tagid = $tagid";
    $link_result = mysql_query($link_query) OR die(mysql_error());
    while($link_data =  mysql_fetch_assoc($link_result)){
    	$linkid = $link_data['id'];
    	$linkdata_query = "SELECT * FROM links WHERE id = $linkid";
    	$linkdata_result = mysql_query($linkdata_query) OR die(mysql_error());
    	while ($linkdata_data = mysql_fetch_assoc($linkdata_result)){
    		array_push($linkarr, $linkdata_data);
    	}
    }
    
    mit $linkarr möchte ich dann weiterarbeiten.
     
  12. Hobbes_

    Hobbes_ Gast

    Es erstaunt mich etwas, dass diese $tag_query nicht funktionieren soll. o_O Kommt jetzt noch die Fehlermeldung oder wird erneut die falsche Tabelle durchsucht? Kannst Du ein paar Beispiele von echten $tag_query Echos posten, die Du Dir ja zu Debug-Zwecken anzeigen lässt?

    Ach ja: Vorhin meinte ich die magic quotes, doch die betreffen eigentlich etwas anderes. Sie sollten trotzdem ausgeschaltet sein.
     
  13. TaTonka

    TaTonka Neuer Berner Rosenapfel

    Dabei seit:
    19.03.06
    Beiträge:
    1.961
    Wenn ich die $tags im $tag_query nicht in Hochkommata einschließe, kommt "Unknown column %wert_von_$tags% in WHERE clause".

    Wenn ich die $tags im $tag_query in Hochkommata einschließe, kommt "You have an error in your SQL Syntax. Refer to your manual for proper use of " in %dateiname% on line 1".

    Ich verzweifel da langsam echt dran.

    Achja, ich hatte das gesamte Script vorher als eine einzige Abfrage mit JOIN, allerdings ging das schief, weil die zu joinenden Tabellen unterschiedlich lang waren, daher kamen komische Ergebnisse raus. In dieser Abfrage hatte ich ganz zu anfang auch das Problem mit dem unknown column, allerdings habe ich dann da $tags in Hochkommata eingeschlossen, und dann war es syntaktisch auf jeden Fall korrekt. Der einzige Unterschied, den ich hatte, war, dass die Query nach den Hochkommata noch weiterging, und jetzt in dem Fall halt nicht mehr. Vllt verschluckt er sich da irgendwie an den String-Abschluss-".


    SELECT * FROM tags WHERE tag = 'iphone'
    SELECT * FROM tags WHERE tag = 'fabrik'

    oder aber halt ohne hochkommata.
    Die magic_quotes habe ich abgeschaltet, ich arbeite immer mit mysql_real_escape_string().
     
    #13 TaTonka, 14.05.08
    Zuletzt bearbeitet: 14.05.08
  14. Maluku

    Maluku Finkenwerder Herbstprinz

    Dabei seit:
    10.05.08
    Beiträge:
    464
  15. TaTonka

    TaTonka Neuer Berner Rosenapfel

    Dabei seit:
    19.03.06
    Beiträge:
    1.961
    und was hat das jetzt mit meinem ursprungsproblem zu tun?

    hum...ich hab das feld tag als varchar definiert...kann es damit zu tun haben? dass der nicht so wirklich klarkommt, wenn er da ne string-abfrage macht?
     
  16. Trapper

    Trapper Boskop

    Dabei seit:
    12.05.05
    Beiträge:
    213
    Hast du schonmal ne MySQL-Shell gestartet und die Anfrage dort abgesetzt? Falls ja, schreibt er da den gleichen Fehler? Damit könntest du eingrenzen, ob der Fehler in der Anfrage an sich steckt oder irgendwo in der PHP-Verarbeitung.

    Ansonsten wäre es gut, wenn du mal den Output von
    Code:
    describe tags;
    
    reinpasten könntest.
     
  17. TaTonka

    TaTonka Neuer Berner Rosenapfel

    Dabei seit:
    19.03.06
    Beiträge:
    1.961
    ich habs nach langem rumfrickeln mit den quotes letztendlich gelöst. ich habe mir beim die() auch die zeilennummer mit ausgeben lassen, und hab gemerkt, dass es an nem ganz anderen befehl gehapert hat.
     
  18. Hobbes_

    Hobbes_ Gast

    Eine gute Idee, das mit den Zeilennummern.

    So erklärt sich, dass die gepostete Syntax nicht so sehr nach Fehler aussieht.

    Ich freue mich, dass Du das problem lösen konntest!
     

Diese Seite empfehlen