Forum: PC-Programmierung PHP MySQL: Unknown column in 'field list'


von Tim 🔆 (solarlicht)


Lesenswert?

In phpMyAdmin habe ich in meiner MySQL-Tabelle lediglich ein Feld von 
projekt_ordner in projekt_verzeichnis umbenannt. Eigentlich nichts 
ungewöhnliches und bisher machte so was keine Probleme.

Nun erhalte ich bei der SQL-Abfrage in PHP folgende Fehlermeldung:
Uncaught mysqli_sql_exception: Unknown column 'projekt_ordner' in 'field 
list'

Ändere ich das Feld wieder in den ursprünglichen Namen, funktioniert es 
wieder.

Natürlich habe ich schon gegoogelt, aber aus den Ergebnissen werde ich 
nicht schlau. Gibt es irgendwo einen Cache den man löschen kann?

Die Tabellenwartungsoptionen in phpMyAdmin unter Operationen → 
Hilfsmittel brachten jedenfalls keinen Erfolg.

An meiner Abfrage denke ich liegt es nicht. Die ändert sich dadurch ja 
nicht.
$db_projekt = mysqli_fetch_array(mysqli_query($mysql_cms,"SELECT * FROM 
projekte WHERE id = $global_projekt_id"));

Kürzlich habe ich aber ein Update durchgeführt. Installiert ist jetzt:
PhpMyAdmin 5.2.1deb3
MySQL 8.0.42-0ubuntu0.24.04.2
PHP 8.3.6

von Frank E. (Firma: Q3) (qualidat)


Lesenswert?

Also irgend eine Instanz findet den alten Tabellenname nicht mehr, hat 
also die Umbenennung nicht mitbekommen. Das gilt es zu finden.

Gibt es weitere Tabellen, evtl. "Views"? Oder ein Index, ein Trigger 
oder sowas in der Art, "foreign key"-Definitionen in einer anderen 
Tabelle, Cascading ...

Wie hast du die Tabelle umbenannt? Ganz offiziell mit "rename table 
..."?

Hinweis allgemein: "select * ..." macht man wenn man interaktiv, z.B. in 
PHPMyadmin mal was nachsehen möchte. Wenn man das Ergebnis in einer 
Programmiersprache weiter verwenden will, sollte man besser die 
Feldnamen in einer Liste mit Komma hinschreiben. Erstens weiss man dann 
genau, in welcher Reihenfolge die Daten kommen und bei Aggregationen wie 
Sum() oder Count() erhält man überhaupt erst einen verwertbaren Namen 
für den Zugriff, dann sollte man "as..." (Alias) verwenden. Ausserdem 
vereinfacht es das Debugging.

: Bearbeitet durch User
von Rene K. (xdraconix)


Lesenswert?

Was sagt denn das Error Log deines Webservers... Der sagt dir ja genau 
wo und in welcher Zeile und mit welchem Syntax der Fehler ausgeworfen 
wird.

von Tim 🔆 (solarlicht)


Lesenswert?

Frank E. schrieb:
> Also irgend eine Instanz findet den alten Tabellenname nicht mehr, hat
> also die Umbenennung nicht mitbekommen. Das gilt es zu finden.

Das ist nur komisch, denn ich habe den Feldnamen oder korrekter gesagt 
den Namen der Spalte jetzt testweise über die Linux-Konsole statt in 
phpMyAdmin umbenannt.

ALTER TABLE `projekte` CHANGE `projekt_ordner` `projekt_verzeichnis` 
VARCHAR(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL;

In phpMyAdmin sieht man dann auch anschließend die Änderung. Trotzdem 
besteht der Fehler.

Auch löschen der Spalte und neu anlegen bringt nichts.

> Gibt es weitere Tabellen, evtl. "Views"? Oder ein Index, ein Trigger
> oder sowas in der Art, "foreign key"-Definitionen in einer anderen
> Tabelle, Cascading ...

Nichts dergleichen. Ein Index habe ich bisher nur über id angelegt und 
dies testweise gelöscht und neu angelegt.

> Wie hast du die Tabelle umbenannt? Ganz offiziell mit "rename table
> ..."?

Die Spalte, nicht die Tabelle. Aber siehe oben.

Rene K. schrieb:
> Was sagt denn das Error Log deines Webservers... Der sagt dir ja genau
> wo und in welcher Zeile und mit welchem Syntax der Fehler ausgeworfen
> wird.

Da steht leider genau das gleiche drin, was mir auch PHP ausspuckt.

Was ich sonst noch gefunden habe, dass bei der 
/etc/phpmyadmin/config-db.php der Nutzer nicht stimmte. (Im Apache habe 
ich einen anderen Nutzer anstelle von www-data eingetragen). Nach der 
Korrektur wird das in der error.log nicht mehr bemängelt, dafür werden 
mir dann beim Login in phpMyAdmin zwei Server zur Auswahl angezeigt, 
einmal localhost:3306 und einmal localhost(root) und der automatische 
Login funktioniert nicht mehr. Den Zusammenhang verstehe ich nicht, aber 
es ändert sich auch nichts an meinem Problem, egal welchen Server ich 
beim Login auswähle.

Auf meinem alten Rechner mit etwas älteren Versionen von mySQL und 
phpMyAdmin läuft alles normal. Den habe ich ansonsten genauso 
konfiguriert.

: Bearbeitet durch User
von Tim 🔆 (solarlicht)


Lesenswert?

Ich kapiere es überhaupt nicht.

Jetzt habe ich die Tabelle komplett gelöscht und eine neue angelegt.

Statt * die Spalten einzeln bei der Abfrage angegeben.

Beides erfolglos. So kann man den Sonntag Abend verbraten...

von Stefan R. (stefan_r_bs)


Lesenswert?

Tim 🔆 schrieb:
> Jetzt habe ich die Tabelle komplett gelöscht und eine neue angelegt.
>
> Statt * die Spalten einzeln bei der Abfrage angegeben.

Hmm, dann mach doch jetzt probeweise mal "SELECT projekt_verzeichnis AS 
projekt_ordner, ... FROM ...", ob es dann plötzlich wieder geht und 
falls ja, such in deinem Code, wo der String "projekt_ordner" erwähnt 
wird.

Ich meide PHP/MySQL wie die Pest, darum bin ich nicht auf dem Laufenden:

- Ist irgendein Framework im Einsatz, das dir Arbeit abnehmen soll und 
im Gegenzug erwartet, dass die Spalten genauso heißen wie die Variablen 
in PHP?

- Lässt sich der Exception nicht ein Stack-Trace entlocken, der dir 
sagt, exakt in welcher Codezeile der Fehler auftritt?

: Bearbeitet durch User
von Ein T. (ein_typ)


Lesenswert?

Tim 🔆 schrieb:
> In phpMyAdmin habe ich in meiner MySQL-Tabelle lediglich ein Feld von
> projekt_ordner in projekt_verzeichnis umbenannt. Eigentlich nichts
> ungewöhnliches und bisher machte so was keine Probleme.
>
> Nun erhalte ich bei der SQL-Abfrage in PHP folgende Fehlermeldung:
> Uncaught mysqli_sql_exception: Unknown column 'projekt_ordner' in 'field
> list'

1. Ins Wurzelverzeichnis des Projekts gehen, dort
1
grep -ri projekt_verzeichnis .

aufrufen und schauen, wo der alte Spaltenname benutzt wird. Vermutlich 
wird der alte Spaltenname noch weiterhin beim Zugriff auf die Ergebnisse 
Deines Statement ("$row['projekt_ordner']") benutzt.

2. Fehlermeldungen anschauen, da sollten der Name des Skripts und die 
Zeile aufgeführt werden, wo der Fehler auftritt. Dort nachschauen. :-)

von Rahul D. (rahul)


Lesenswert?

Ein T. schrieb:
> aufrufen und schauen, wo der alte Spaltenname benutzt wird. Vermutlich
> wird der alte Spaltenname noch weiterhin beim Zugriff auf die Ergebnisse
> Deines Statement ("$row['projekt_ordner']") benutzt.
+1

oder einfach mal ein var_dump($db_projekt); ausgeben lassen

> 2. Fehlermeldungen anschauen, da sollten der Name des Skripts und die
> Zeile aufgeführt werden, wo der Fehler auftritt. Dort nachschauen. :-)
+1

von Tim 🔆 (solarlicht)


Lesenswert?

Leute, da habe ich echt den Bock abgeschossen. Ich schäme mich den 
Thread eröffnet zu haben.

Eben wunderte ich mich, dass die PHP-Datei die ich gestern geändert 
hatte, wieder im Ursprungszustand war. Da dämmerte es mir. Ich hatte das 
Projekt irgendwann auf der Festplatte verschoben, aber im Editor schön 
weitergearbeitet ohne die Datei neu zu öffnen. Die wurde dann immer 
schön am alten Ort abgespeichert :-(

Ich musste diese jetzt nur noch ins Arbeitsverzeichnis schieben und wie 
zu erwarten gibt es natürlich keinen Fehler mehr.

Tut mir leid, dass ich eure Zeit verschwendet habe.

: Bearbeitet durch User
von Rahul D. (rahul)


Lesenswert?

Tim 🔆 schrieb:
> Tut mir leid, dass ich eure Zeit verschwendet habe.

Rechnung kommt. :D

Tim 🔆 schrieb:
> aber im Editor schön
> weitergearbeitet ohne die Datei neu zu öffnen.

Welchen Editor benutzt du denn?
Notepad++ meckert rum, wenn es die Dateien nicht findet, die noch als 
geöffnet gelten.

von Frank D. (Firma: LAPD) (frank_s634)


Lesenswert?

Bruahahaha!

Ok, sowas ist mir auch schon passiert.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.