• Apfeltalk ändert einen Teil seiner Allgemeinen Geschäftsbedingungen (AGB), das Löschen von Useraccounts betreffend.
    Näheres könnt Ihr hier nachlesen: AGB-Änderung
  • Viele hassen ihn, manche schwören auf ihn, wir aber möchten unbedingt sehen, welche Bilder Ihr vor Eurem geistigen Auge bzw. vor der Linse Eures iPhone oder iPad sehen könnt, wenn Ihr dieses Wort hört oder lest. Macht mit und beteiligt Euch an unserem Frühjahrsputz ---> Klick

SQL Abfrage mit Variablen

TaTonka

Neuer Berner Rosenapfel
Registriert
19.03.06
Beiträge
1.975
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.
 

ins0m

Gloster
Registriert
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 \' ) ?
 

TaTonka

Neuer Berner Rosenapfel
Registriert
19.03.06
Beiträge
1.975
öh...nö. aber die query an sich in doppelte, und die variable in einfache.
 

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.
 

TaTonka

Neuer Berner Rosenapfel
Registriert
19.03.06
Beiträge
1.975
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.
 

Hobbes_

Gast
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.

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?
 

TaTonka

Neuer Berner Rosenapfel
Registriert
19.03.06
Beiträge
1.975
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
 

ins0m

Gloster
Registriert
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 !
 

TaTonka

Neuer Berner Rosenapfel
Registriert
19.03.06
Beiträge
1.975
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.
 

Hobbes_

Gast
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.

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.
 

TaTonka

Neuer Berner Rosenapfel
Registriert
19.03.06
Beiträge
1.975
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().
 
Zuletzt bearbeitet:

TaTonka

Neuer Berner Rosenapfel
Registriert
19.03.06
Beiträge
1.975
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?
 

Trapper

Meraner
Registriert
12.05.05
Beiträge
231
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.
 

TaTonka

Neuer Berner Rosenapfel
Registriert
19.03.06
Beiträge
1.975
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.
 

Hobbes_

Gast
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.

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!