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
    Standards - Best Practices - AwesomePHP - Guideline für WebApps

    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.
        Zitat von nikosch
        Macht doch alle was Ihr wollt mit Eurem Billigscheiß. Von mir aus sollen alle Eure Server abrauchen.

        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
                          PHP-Klassen auf github

                          Kommentar

                          Lädt...
                          X