Willkommen ~Gast!
Registrieren || Einloggen || Hilfe/FAQ || Staff
Probleme mit der Registrierung im Forum? Melde dich unter registerEin Bild.
Autor Beitrag
000
04.01.2007, 16:52
LeJean



Tag,

ganz blöde Sache, an der ich schon seit Ewigkeiten rumsuche. Ich kenne den SQL-Fehler "Unknown column 'xxx' in 'field list'" sehr wohl, und weiß auch was er zu bedeuten hat. Doof ist aber, dass mir so verdammt sicher bin, in der kleinen SQL-Abfrage, die ihn hervorruft, keine Fehler zu haben:

Quellcode:$insert_name = mysql_query('UPDATE rezepte SET altnames = '.$altnames_new.' WHERE id = '.$id.'') or die('SQL-FEHLER (Zeile 54): '.mysql_error()); Ich habe zur Datenbank connected, die Tabelle 'rezepte' existiert mit allen relevanten Einträgen. Die Inhalte aller wichtigen Variablen hab ich geprüft, die stimmen alle.
Das extrem komische bei diesem Fehler ist jetzt, dass ich an Stelle der 'xxx' in Unknown column 'xxx' in 'field list' keine Tabellenspalte angegeben bekomme, sondern dass xxx immer der Inhalt von $altnames_new ist.
Verwunderlich ist auch, dass ein paar Zeilen später eine sehr ähnliche Abfrage (die halt nur an eine andere Tabellenspalte als 'altnames' Werte übergibt) einwandfrei funktioniert, und das auch unter den selben Bedingungen.

Edit: Ach ja, die Tabellenspalte 'altnames' ist VARCHAR mit max 250 Länge, übergeben wird ein einfacher String.

So langsam hab ich echt keine Ahnung mehr wo ich suchen soll, ich hab alle möglichen PHP / MySQL Seiten durchforstet, meine Syntax stimmt mit Sicherheit... Ist jemandem von euch ein solcher Fehler bekannt, oder kann sich wer vorstellen woran sowas liegt?

Danke,
LeJean

--


Dieser Beitrag wurde am 04.01.2007 um 17:00 von LeJean bearbeitet.
zum Seitenanfang zum Seitenende Profil || Suche
001
04.01.2007, 17:00
Adrian_Broher
Admin


Vermutung:

$altnames_new ist ein string? sollte er dann nicht in anführungszeichen?

wie sieht die tabellenstruktur von rezepte aus?

was nämlich zZ als query hinten rauskommt, wenn

$altnames_new = "Foo" und
$id = 1

ist sieht so aus:

Quellcode:UPDATE rezepte SET altnames = Foo WHERE id = 1
Dann versucht die datenbank den Wert der nicht existierenden Spalte 'Foo' in die Spalte 'altnames' zu speichern, wo die id gleich 1 ist. Und ich glaube nicht das das im Sinne des Erfinders ist.

--

There is nothing wrong with high standards. It's your problem that you don't meet them.
If you think it's simple, then you have misunderstood the problem.
When a customer says "nothing has changed", assume they're lying.


Dieser Beitrag wurde am 04.01.2007 um 17:07 von Adrian_Broher bearbeitet.
zum Seitenanfang zum Seitenende Profil || Suche
002
04.01.2007, 17:11
LeJean



Der Inhalt von $altnames_new ist ein String, ja. Es gibt ja die Möglichkeiten einen String mit Anführungszeichen oder Hochkommata zu begrenzen...
Quellcode:$string_1 = "hier steht was mit ner variablen drin: $variable";
$string_2 = 'hier steht was mit ner variablen drin: '.$variable;
Das dürfte beides denselben Effekt haben.

Edit: ach so meinst du - naja, auch wenn ich Backticks verwende (`...`), hilft das nicht weiter, der Fehler bleibt.

Die Tabellenstruktur von rezepte ist
id | int | unsigned | auto_increment | not_null
name | varchar | 50
altnames | varchar | 250 | Standard '0'
...

ich will bei einem bestehenden Rezept alternative Namen eintragen. Wenn jetzt 'altnames' == '0' ist, dann wird der neu angegebene Name so in $altnames_new gespeichert, wenn 'altnames' in besagter Tabellenzeile schon einen Eintrag hat, dann wird $altnames_new mit dem bisherigen Inhalt belegt und durch einen .-Operator der neue Name mit angehängt. Damit sind alle möglichen Fälle abgedeckt und die Variablenzuweisung funktioniert so weit auch. D.h. wenn ich von Hand etwas in die Tabelle schreibe, das auslese, nen neuen alternativen Namen eintrage und mir die Variableninhalte ansehe, dann hat $altnames_new genau den richtigen Inhalt. Genauso wenn halt in der Tabellenzeile noch nichts eingetragen war und ich einfach so nen neuen Namen einfügen lassen will.

Nur kommt meine SQL-Abfrage mit irgendwas nicht klar, und ich hab keine Ahnung warum das Ding immer nach der Spalte mit dem neu eingetragenen Namen sucht. Wenn ich spaßeshalber mal den Namen 'altnames' neu eintragen lassen will, dann bekomm ich meine zuvor definierte Ausgabe "$altnames_new wurde eingetragen", wenn ich aber in die Tabelle gucke, dann steht nix drin - 'altnames' hat immernoch '0'.
Ich hab schon überlegt ob das an der 0 liegt, die per Default drinsteht, aber auch ohne Eintrag, oder einfach mit 'a' etc. komm ich nicht weiter - mein Fehler bleibt weiterhin bestehen.

--


Dieser Beitrag wurde am 04.01.2007 um 17:16 von LeJean bearbeitet.
zum Seitenanfang zum Seitenende Profil || Suche
003
04.01.2007, 17:15
Adrian_Broher
Admin


Lass den querystring mal in einer temporären variable speichern und druck die dann vor mysql_query aus.

--

There is nothing wrong with high standards. It's your problem that you don't meet them.
If you think it's simple, then you have misunderstood the problem.
When a customer says "nothing has changed", assume they're lying.


Dieser Beitrag wurde am 04.01.2007 um 17:30 von Adrian_Broher bearbeitet.
zum Seitenanfang zum Seitenende Profil || Suche
004
04.01.2007, 17:16
LeJean



Hab ich auch schon probiert, das sah auch gut aus ;)

Aber du hast Recht. Ich muss echte Anführungszeichen ("...") drumherum machen. Die andere (sehr ähnliche) Abfrage hat scheinbar funktioniert, weil ich da nur mit Zahlen gearbeitet habe. Ich dachte immer, dass ich auch mit Backticks (`...`) Strings begrenzen kann. Na toll, hätte man auch eher merken können -.-

Dankeschön!

--

zum Seitenanfang zum Seitenende Profil || Suche