Ankündigung

Einklappen
Keine Ankündigung bisher.

Sqlite-Syntax Probleme

Einklappen

Neue Werbung 2019

Einklappen
X
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • Sqlite-Syntax Probleme

    Hallo,

    ich versuche gerade, anstatt der MySql-Datenbank Sqlite zu benutzen, da es sich immer nur um wenige Datensätze in der Datenbank handelt.
    Ich versuche, meine Datenbankanfragen umzubauen. das ist sehr mühsam.

    Diese Abfrage funktioniert nicht:
    Code:
    $db = new SQLite3('hhh.sqlite3');
    $stmt = $db->query("SELECT * FROM $tb WHERE termin_id = '$termin_id' LIMIT 1");
    $row = sqlite_fetch_object($stmt);// Geht nicht!!  
    
    $stamp = $row -> stamp;
    Ich weiss nicht, wie ich mit dem Ergebnis umgehen soll.

    Die Seite liefert folgende Fehler:
    Code:
    Warning: sqlite_fetch_object() expects parameter 1 to be resource, object given in /homepages/40/d212435904/htdocs/hhh/backend/termine.php on line 138
    
    Notice: Trying to get property of non-object in /homepages/40/d212435904/htdocs/hhh/backend/termine.php on line 140
    Kann mir jemand helfen?

    Danke schon mal

    Gunther

  • #2
    Schau dir bitte mal "SQL-Injection" an

    Kommentar


    • #3
      ich denke das deine Query falsche Ergebnisse liefern wird überprüfe diese nochmal

      Kommentar


      • #4
        Ich denke, dass $stmt ein Object ist, keine Resource... Aber das sagt ja bereits die Fehlermeldung.
        [QUOTE=nikosch]Macht doch alle was Ihr wollt mit Eurem Billigscheiß. Von mir aus sollen alle Eure Server abrauchen.[/QUOTE]

        Kommentar


        • #5
          Ich danke Euch für die schnelle Reaktion, hilft mir aber nicht weiter, weil ich nicht weiss, wie ich mit dem $stmt umgehen soll, damit ich es über $row auslesen kann.

          Gunther

          Kommentar


          • #6
            bist du dir 100% sicher das deine Query funktioniert?

            Wenn ja, brauchst du $stmt unbedingt als object?
            versuch es mal so:

            sqlite_fetch_array($stmt);

            und wandle dies dann in ein object um


            function sqlite_fetch_object(&$resource){
            $arr = sqlite_fetch_array($resource);
            $obj = new stdClass();
            foreach ($arr as $key => $value) {
            # Check is valid $T_VARIABLE
            if (ereg(\"[a-zA-Z_\x7f-\xff][a-zA-Z0-9_\x7f-\xff]*\", $key)) {
            $obj->$key = $value;
            }
            }
            return $obj;
            }

            habe ich hier gefunden wenn das hilft:
            http://www.php.net/manual/en/functio...tch-object.php

            Kommentar


            • #7
              sqlite_fetch_object() gehört zur SQLite API, du verwendest aber die SQLite3 API. D.h. du übergibst ein inkompatibles Objekt.

              Vergleiche die Übersicht: SQLite 3 und SQLite

              Kommentar


              • #8
                Hallo,

                habe auch so versucht:

                1)
                $row = $stmt->fetchArray(SQLITE3_ASSOC);
                2)
                sqlite_fetch_array($stmt);

                funktioniert Beides nicht.

                Auch der Ansatz von Blackscr33n liefert Fehlermeldungen.
                @Tropi: Ich glaube, Du hast Recht. Ich weiss es aber nicht besser. Wie geht das sonst?

                Danke Gunther

                Kommentar


                • #9
                  Entscheide dich für eine API. Entweder du nutzt new SQLite() und kannst dann sqlite_fetch_object() benutzen oder du verwendest SQLite3 und kannst dann dementsprechend nur SQLite3Result::fetchArray() benutzen. Warum aber nicht einfach PDO mit SQLite3-Treiber benutzen?

                  Kommentar


                  • #10
                    Hallo Tropi,

                    jetzt mach ich das so:
                    Code:
                    $db = new SQLite3('hhh.sqlite3');
                    $stmt = $db->query("SELECT * FROM $tb WHERE termin_id = '$termin_id' LIMIT 1");
                    $row = $stmt->fetchArray(SQLITE3_ASSOC);
                    Die Fehlermeldung lautet:
                    Code:
                    Notice: Trying to get property of non-object in /homepages/40/d212435904/htdocs/hhh/backend/termine.php on line 139
                    Diese Zeile liefert den Fehler:
                    Code:
                    $stamp = $row -> stamp;
                    Wie geht denn das anders?

                    Habe jetzt selbst gefunden: Die Zuweisung funktioniert so nicht. Richtig ist:
                    Code:
                    $stamp = $row['stamp'];
                    So funktionierts!

                    Danke Gunther

                    Kommentar


                    • #11
                      Beacht das die Funktion jetzt fetchArray() heißt. Du bekommst also ein Array zurück und kein Objekt. Du kannst also nicht mit "->" auf die Eigenschaft zugreifen, sondern musst die Array-Äquivalente, sprich [] verwenden.

                      Kommentar


                      • #12
                        Dein Query-String ist nach wie vor unsicher: http://www.php.net/manual/de/sqlite3.escapestring.php

                        Alternativ kannst du auch prepared Statements verwenden: http://www.php.net/manual/de/sqlite3.prepare.php

                        Da die Sqlite3-Extension doch relativ funktionsarm ist rate ich außerdem dazu PDO statt SQLite3 zu verwenden.
                        [URL="https://gitter.im/php-de/chat?utm_source=share-link&utm_medium=link&utm_campaign=share-link"]PHP.de Gitter.im Chat[/URL] - [URL="https://raindrop.io/user/32178"]Meine öffentlichen Bookmarks[/URL] ← Ich habe dir geholfen ? [B][URL="https://www.amazon.de/gp/wishlist/348FHGUZWTNL0"]Beschenk mich[/URL][/B].

                        Kommentar


                        • #13
                          Ja, nimm gleich PDO und PDO_SQLITE um mit SQLite3-DB zu arbeiten.
                          Um SQL-Injection zu vermeiden, nimm Prepared Statements.

                          LG jspit

                          Kommentar

                          Lädt...
                          X