ilch Forum » Ilch CMS 2.X » Fehlersuche und Probleme » Unknown column '1' in 'where clause' ...

Geschlossen
  1. #1
    User Pic
    SnakeHH Mitglied
    Registriert seit
    06.03.2019
    Beiträge
    46
    Beitragswertungen
    6 Beitragspunkte
    Hallo,

    habe plötzlich (habe keine Änderung vorgenommen) diese Fehlermeldung.

    MySQL Error: Unknown column '1' in 'where clause'
    in Query: SELECT `key`,`value` FROM `ilch_config` WHERE `autoload` = "1"

    Wie kann das sein und noch wichtiger: wie kann ich es loswerden 🙂

    Vielen Dank

    Snake


    verwendete ilch Version: 2.1.x
    0 Mitglieder finden den Beitrag gut.
  2. #2
    User Pic
    Outi77 Mitglied
    Registriert seit
    31.03.2013
    Beiträge
    1.337
    Beitragswertungen
    143 Beitragspunkte
    Moin,

    schau doch mal bitte nach, welcher Datentyp in der Spalte autoload benötigt wird.
    Aktuell wird ein String abgefragt, womöglich steht die Spalte aber auf Integer int(?) oder byte(?)...Zahlenwert.
    Die richtige Formulierung eines Problems ist nicht selten bereits die halbe Lösung.
    »Albert Einstein«
    0 Mitglieder finden den Beitrag gut.
  3. #3
    User Pic
    SnakeHH Mitglied
    Registriert seit
    06.03.2019
    Beiträge
    46
    Beitragswertungen
    6 Beitragspunkte
    Moin und vielen Dank für die schnelle Antwort,

    die Spalte stand auf TINYINT und ich habe es jetzt auf Text geändert. Hat leider nix geholfen. :-(

    Die Fehlermeldung klingt ja eher so, als ob das SQL bereits falsch interpretiert wird - er sucht nach Spalte 1 aber er soll ja alles zurückliefern wo der Wert in autoload 1 ist.


    Zuletzt modifiziert von SnakeHH am 12.04.2019 - 00:05:06
    0 Mitglieder finden den Beitrag gut.
  4. #4
    User Pic
    Outi77 Mitglied
    Registriert seit
    31.03.2013
    Beiträge
    1.337
    Beitragswertungen
    143 Beitragspunkte
    Also eigentlich müßte die Abfrage folgendermaßen aussehen, wenn der Datentyp text ist:
    $abf = db_query("SELECT `key`,`value` FROM `ilch_config` WHERE `autoload` = '1'");

    ...und bei Tinyint:
    $abf = db_query("SELECT `key`,`value` FROM `ilch_config` WHERE `autoload` = 1");



    Zuletzt modifiziert von Outi77 am 12.04.2019 - 13:04:20
    Die richtige Formulierung eines Problems ist nicht selten bereits die halbe Lösung.
    »Albert Einstein«
    0 Mitglieder finden den Beitrag gut.
  5. #5
    User Pic
    SnakeHH Mitglied
    Registriert seit
    06.03.2019
    Beiträge
    46
    Beitragswertungen
    6 Beitragspunkte
    Habe mich vielleicht doof ausgedrückt. Ich habe hier keine Veränderung vorgenommen: das ist ein SQL aus der Standard Ilch Installation... es hat alles über Wochen funktioniert und jetzt das. Denke nicht dass es mit Datentypen oder der SQL Syntax zu tun hat ... das SQL wird doch schon ganz falsch interpretiert... aber wieso plötzlich?
    0 Mitglieder finden den Beitrag gut.
  6. #6
    User Pic
    corian Entwickler
    Registriert seit
    16.06.2011
    Beiträge
    1.096
    Beitragswertungen
    122 Beitragspunkte
    Ich habe dir eine PM geschrieben, müsste man sich im Detail ansehen.
    0 Mitglieder finden den Beitrag gut.
  7. #7
    User Pic
    SnakeHH Mitglied
    Registriert seit
    06.03.2019
    Beiträge
    46
    Beitragswertungen
    6 Beitragspunkte
    Situation:
    Beim Aufruf der Startseite wird die Fehlermeldung ausgegeben:

    An unexpected error occurred:
    
    MySQL Error: Unknown column '1' in 'where clause'
    in Query: SELECT `key`,`value` FROM `ilch_config` WHERE `autoload` = "1"


    Meine Vermutung
    Das SQL wird syntaxtechnisch nicht korrekt zusammengebaut. Wenn ich das SQL aus der Fehlermelung im MySQL absetzte, kann es nicht korrekt ausgeführt werden. Wenn ich das SQL wie folgt korrigiere, funktioniert es:

    SELECT `key`,`value` FROM `ilch_config` WHERE `autoload` = 1

    oder auch

    SELECT `key`,`value` FROM `ilch_config` WHERE `autoload` = '1'


    Es liegt also an den Anführungszeichen. Aber woher kommen die plötzlich und noch viel wichtiger, wo kann ich die beheben? nachdenken

    Das Ergebnis der Abfrage ist dann übrigens wie folgt - denke, das spielt keine Rolle sondern nur, dass die Syntax vom SQL wieder korrekt zusammengebastelt wird.

    date_cms_installed 2019-03-04 12:38:11
    locale de_DE

    Eingrenzung des Fehlers
    Diese Funktion in Database.php löst den Fehler aus aber kommt mir unverdächtig vor:

        /**
         * Loads the config from the database.
         */
        public function loadConfigFromDatabase()
        {
            $configs = $this->db->select(['key', 'value'])
                ->from('config')
                ->where(['autoload' => 1])
                ->execute()
                ->fetchRows();
    
            foreach ($configs as $config) {
                $this->configData[$config['key']]['value'] = $config['value'];
                $this->configData[$config['key']]['autoload'] = 1;
            }
        }



    Ich verstehe es so, habe aber keinen Lösungsansatz dafür:
    ->where(['autoload' => 1])
    erzeugt also einen Syntaxfehler im SQL-String durch die "" in dem WHERE `autoload` = "1"

    Zuletzt modifiziert von SnakeHH am 13.04.2019 - 20:52:40
    0 Mitglieder finden den Beitrag gut.
  8. #8
    User Pic
    SnakeHH Mitglied
    Registriert seit
    06.03.2019
    Beiträge
    46
    Beitragswertungen
    6 Beitragspunkte
    Wenn man sich nicht vorstellen kann, wo der Fehler liegen könnte, nervt es wohl am meisten: Ich habe eine neue Installation aufgesetzt und die dann mal auf die "alte Datenbank" zeigen lassen: Gleicher Fehler.

    Also liegt es doch an der Datenbank, was ich mit der Fehlermeldung überhauptnicht zusammenbringen kann. Ich habe dann mal die ilch_config leergemacht und aus der Neuinstallation eingefügt. Leider auch keine Veränderung :-(
    0 Mitglieder finden den Beitrag gut.
  9. #9
    User Pic
    M.vittel Mitglied
    Registriert seit
    16.11.2018
    Beiträge
    328
    Beitragswertungen
    24 Beitragspunkte
    Das habe ich vermutet das der gleiche Fehler auftritt, wie du bereits geschrieben hast ist in der DB ein Fehler und den hast du wieder mit eingespielt.
    Ich habe zwar nicht viel Plan von der DB, aber ich würde versuchen das ' vor der 1 in der DB zu setzen, wenn es geht dann sollte alles wieder funktionieren.
    (kaputt machen kannst du nichts, und rückgängig machen ist ja auch Möglich)
    RealLife ... das ist doch das Game mit der geilen Grafik und der scheiss Story
    0 Mitglieder finden den Beitrag gut.
  10. #10
    User Pic
    SnakeHH Mitglied
    Registriert seit
    06.03.2019
    Beiträge
    46
    Beitragswertungen
    6 Beitragspunkte
    Danke für den Tipp aber das klingt nicht plausibel. Kann das auch ausschliessen, weil ich einfach mal die "heile" Config-Tabelle aus der Neuinstallation in die Altinstallation eingespielt habe (nachdem ich die Tabelle plattgemacht habe ... hat nix verändert. Irgendwie macht das Ganze für mich keinen Sinn aber ich denke, dass ich den Wald vor lauter Bäume nicht sehe ... vielleicht ist es aber auch so, dass die Fehlermeldung einfach falsch ist und in eine falsche Richtung weist.
    0 Mitglieder finden den Beitrag gut.
  11. #11
    User Pic
    hhunderter Entwickler
    Registriert seit
    12.08.2018
    Beiträge
    436
    Beitragswertungen
    71 Beitragspunkte
    Gab es Server seitig Updates an der Mysql oder PHP Versionen?
    0 Mitglieder finden den Beitrag gut.
  12. #12
    User Pic
    SnakeHH Mitglied
    Registriert seit
    06.03.2019
    Beiträge
    46
    Beitragswertungen
    6 Beitragspunkte
    Nicht, dass ich wüsste.
    Beide Systeme arbeiten mit MySql 5.7 und PHP 7.2. Das alte geht nicht ...
    0 Mitglieder finden den Beitrag gut.
  13. #13
    User Pic
    hhunderter Entwickler
    Registriert seit
    12.08.2018
    Beiträge
    436
    Beitragswertungen
    71 Beitragspunkte
    Das ist sehr komisch, dass es jetzt auf einmal nicht mehr funktioniert, aber vorher funktioniert hatte.
    ZitatZitat
    Es liegt also an den Anführungszeichen. Aber woher kommen die plötzlich und noch viel wichtiger, wo kann ich die beheben? nachdenken

    Dass kann durchaus sein das es daran liegt...
    Erklärt aber nicht warum es bei mir und bei anderen noch immer Funktioniert
    Als ich eine Klasse geschrieben hatte, PDO für MDB-Files, musste ich auch unterscheiden ob es eine zahl ist oder ein String, aber ist auch ein andere Datenbank-Typ.

    Du könntest mal versuchen in der Database.php die Funktion zu ersetzen, dass solle den Fehler erst mal ausklammern:
     public function loadConfigFromDatabase()
        {
    		$configs = $this->db->queryArray('SELECT `key`,`value` FROM `[prefix]_config` WHERE `autoload` = 1');
    
            foreach ($configs as $config) {
                $this->configData[$config['key']]['value'] = $config['value'];
                $this->configData[$config['key']]['autoload'] = 1;
            }
        }


    müsste Mann mal sich genau mal angucken.
    0 Mitglieder finden den Beitrag gut.
  14. #14
    User Pic
    SnakeHH Mitglied
    Registriert seit
    06.03.2019
    Beiträge
    46
    Beitragswertungen
    6 Beitragspunkte
    Danke! :-) Den Ansatz hatte ich auch, wusste nur nicht, wie ich das SQL da reinbringen soll. Leider scheint das keine Ausnahme zu sein, denn wenn ich das austausche, tritt der Fehler dann beim nächsten Fall auf:

    An unexpected error occurred:

    MySQL Error: Unknown column '0' in 'where clause'
    in Query: SELECT * FROM `ilch_users` WHERE `id` = "0"

    Das Spiel kann ich wahrscheinlich weitertreiben bis ich alle ersetzt habe ... wieso passiert das nur?
    0 Mitglieder finden den Beitrag gut.
  15. #15
    User Pic
    corian Entwickler
    Registriert seit
    16.06.2011
    Beiträge
    1.096
    Beitragswertungen
    122 Beitragspunkte
    Deine config von der Datenbank ist anders, ich denke es liegt daran das ANSI_QUOTES aktiviert ist.
    0 Mitglieder finden den Beitrag gut.
  16. #16
    User Pic
    SnakeHH Mitglied
    Registriert seit
    06.03.2019
    Beiträge
    46
    Beitragswertungen
    6 Beitragspunkte
    Du meinst den ANSI_QUOTES SQL mode für die MySQL, richtig? Das ist etwas, was ich sicherlich nicht verändert habe und ich denke auch nicht, dass ich das kann (1und1-Hosting).

    Vielleicht hilft es ja, wenn ich die Datenbank einfach mal komplett exportiere und in eine andere einspiele.
    0 Mitglieder finden den Beitrag gut.
  17. #17
    User Pic
    corian Entwickler
    Registriert seit
    16.06.2011
    Beiträge
    1.096
    Beitragswertungen
    122 Beitragspunkte
    Ich hatte es bei dir getestet und es hatte funktioniert. Leider konnte ich das nur über die session setzen und so nicht dauerhaft übernehmen. Für eine dauerhafte Lösung muss das in der config eingestellt werden oder eben in der Datenbank wenn du die Rechte hast.


    Zuletzt modifiziert von corian am 16.04.2019 - 22:35:51
    0 Mitglieder finden den Beitrag gut.
  18. #18
    User Pic
    SnakeHH Mitglied
    Registriert seit
    06.03.2019
    Beiträge
    46
    Beitragswertungen
    6 Beitragspunkte
    Oh - cool! Dann denke ich, ist wohl ein Gespräch mit dem 1und1-Support notwendig. Ich kann das nicht einstellen und die Datenbank ist ja bereits gelaufen .... mehre Wochen.
    0 Mitglieder finden den Beitrag gut.
  19. #19
    User Pic
    corian Entwickler
    Registriert seit
    16.06.2011
    Beiträge
    1.096
    Beitragswertungen
    122 Beitragspunkte
    Du musst schauen ob du es einstellen kannst....schau bitte ob du die config datei hast. Meistens unter
    /etc/my.cnf

    0 Mitglieder finden den Beitrag gut.
  20. #20
    User Pic
    SnakeHH Mitglied
    Registriert seit
    06.03.2019
    Beiträge
    46
    Beitragswertungen
    6 Beitragspunkte
    Vielen, vielen Dank an alle hier. Habe viel gelernt :-) Corian hatte recht und ich konnte es mit einem Workaround lösen :-)

    Da eine neu aufgesetzte Datenbank ja funktioniert und es anscheinend irgendwie mit der Datenbankeinstellung zu tun hat (an die ich bei 1und1/IONOS nicht herankomme), habe ich es wie folgt gelöst.

    Lösung

    - Mit phpMyAdmin über Exportieren die gesamte Datenbank gesichert
    - Leere neue Datenbank angelegt
    - Sicherungsdatei angepasst, damit das DB-Create nicht drin ist. Diese Zeile gelöscht:
    CREATE DATABASE `DBxxxxxx` ... ; USE DBxxxxxx;
    - Mit phpMyAdmin über Importieren die Sicherungsdatei eingespielt
    - in der application/config.php die Datenbank auf die neue Einstellung geändert.

    Was für eine Geburt ...


    Zuletzt modifiziert von SnakeHH am 16.04.2019 - 23:16:05
    2 Mitglieder finden den Beitrag gut.
  21. #21
    User Pic
    M.vittel Mitglied
    Registriert seit
    16.11.2018
    Beiträge
    328
    Beitragswertungen
    24 Beitragspunkte
    Klasse es freut mich das dein Problem behoben ist.
    Übrigens SnakeHH finde es auch sehr gut das du einen Lösungsweg eingetragen hast für die Nachwelt. Yes
    RealLife ... das ist doch das Game mit der geilen Grafik und der scheiss Story
    0 Mitglieder finden den Beitrag gut.
Geschlossen

Zurück zu Fehlersuche und Probleme

Optionen: Bei einer Antwort zu diesem Thema eine eMail erhalten