sqlite Fatal Error

  • Hallo,
    Ich möchte mich auf meinem Raspberry mit einer Sqlite Datenbank verbinden, per PHP. Ich benutze den Nginx Webserver, dieser läuft auch einwandfrei.
    Sqlite ist installiert.


    Wenn ich auf die PHP Seite gehe kommt folgende Meldung:
    [font="Times"]Fatal error[/font][font="Times"]: Call to undefined function sqlite_open() in [/font][font="Times"]/var/www/db/db1.php[/font][font="Times"] on line [/font][font="Times"]3[/font]


    Eigentlich deutet die Fehlermeldung doch darauf hin das Sqlite nicht aktiviert und installiert ist. Aber laut PHPinfo sieht das gut aus?!


    Folgendes zeigt mir die phpinfo an:
    [Blocked Image: http://up.picr.de/15525096ty.png]


    [Blocked Image: http://up.picr.de/15525097wu.png]

  • Das ist Möglich. Diese müsste ich ja in der php.ini eintragen. Aber in welche, wenn ich auf dem Raspberry nach php.ini suche findet er folgende:
    /etc/php5/fpm/php.ini
    /etc/php5/cgi/php.ini
    /etc/php5/cli/php.ini


    Meine /etc/php5/fpm/php.ini sieht so aus, an den anderen habe ich bisher noch nichts geändert

    Code
    [sqlite]
    ; http://php.net/sqlite.assoc-case
    ;sqlite.assoc_case = 0
    
    
    [sqlite3]
    ;sqlite3.extension_dir =
    extension=sqlite.so
    extension=sqlite3.so
    extension=php_sqlite3.so



    Edit:
    Installiert habe ich damals:
    sudo apt-get install nginx php5-fpm php5-cgi php5-cli php5-common php5-gd sqlite php5-sqlite php5-curl
    Und nach dem ich die Einträge ergänzt habe wurde auf php5-fpm und nginx neu gestartet:
    sudo /etc/init.d/php5-fpm restart
    sudo /etc/init.d/nginx restart

  • Du meinst es müsste so aussehen?



    Irgendwie tut sich da weiter nichts. Könnte jemand mal den Auszug aus der php.ini posten.


    Müsste ich nicht noch einen Eintrag in der [font="Courier New"]/etc/nginx/sites-available/default [/font]hinterlegen?

  • sqlite_open() ist keine PDO Funktion, würd ich aber auf jedenfall nutzen ( PDO )


    Zeig mal bitte deinen PHP Code



    [hr]



    Ich verwende in meinen PHP Scripts immer folgende Functions:


    Im PHP Script kann dann sowas genutzt werden:

    Code
    $SQLITEdb = "/var/www/db.sqlite";
    
    
    $db = db_con();
    $query = $db->query("SELECT pass FROM auth WHERE user='".$USER."'");
    $result = $query->fetch(PDO::FETCH_ASSOC);
    if ($result['pass'] == md5($PWD)) {
    	$query = $db->query("UPDATE auth SET lastlogin='".time()."' WHERE user='".$USER."'");
    }

  • Zeig mal bitte deinen PHP Code


    Hallo, danke für die schnelle Antwort. Habe das ganze mal nach einem Sqlite Tutorial versucht, mit folgendem Code:



    Hier der Link zu der Anleitung (http://www.rrzn.uni-hannover.d…lite_install_uebungen.pdf)

  • Mit den typischen sqlite Befehlen hatte ich auch mal angefangen, sties dann aber schnell auf ne Menge Probleme weswegen ich dann auf PDO umgestiegen bin.. Der PDO-SQLite Treiber ist zudem effizienter und schneller :)


    Probier das mal mit meinen oben geposteten Zeilen ;)

  • Hat jemand zum PDO Einstieg ein paar Tutorials?


    So werde ich mich mal einlesen und mal ein bisschen versuchen. Möchte ja wissen was ich da mache.

    • Official Post

    Schau dir mal mein Tutorial zu der Alarmanlage an.


    Unter Software findest du die Befehle die benötigt werden einen lighttpd Server mit Fastcgi, PHP 5 sowie Sqlite 3 aufzusetzen.


    Im demo2.php findest du dann ein Beispiel wie man mit der PDO Bibliothek auf die Datenbank zugreift.


    [code=php]$db = new PDO('sqlite:database.db');
    $db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
    $result = $db->query('SELECT id, time, obj, message FROM tbl_log ORDER BY id DESC;');[/php]


    Ich hoffe ich konnte helfen!


    Gruß,
    Phil

    Well in my humble opinion, of course without offending anyone who thinks differently from my point of view, but also by looking into this matter in a different way and without fighting and by trying to make it clear and by considering each and every one's opinion, I honestly believe that I completely forgot what I was going to say.

    Edited once, last by ps915 ().

  • Ich nutze zum auswerten der SELECT Resultate immer folgendes:


    Code
    $db = db_con();
    $query = $db->query("SELECT id,user FROM auth WHERE 1");
    while($result = $query->fetch(PDO::FETCH_ASSOC)){
    	$id = $result['id'];
    	$user = $result['user'];
    }


    die entsprechende function für " db_con(); " wird hier aber auch benötigt..
    am besten functionen nutzen wenn man den selben code immer und immer wieder nutzen möchte - will man dann nämlich was verändern muss man das nicht 20x ändern sondern nur einmal in der function aber am aufruf ändert sich nix..


    Ansonsten geht natürlich auch der Weg den ich in Post#7 aufgezeigt habe (im Prinzip die while Schleife weglassen)



    PDO ist ein Datenbank-übergreifender Schnittstellen-Treiber. Es gibt also im grunde keine speziellen SQLite3 Befehle. Alle PDO Funktionen/Befehle können für sowohl SQLite als auch MySQL oder Oracle usw genutzt werden

  • Danke für eure zwei Antworten. Werde mich sobald ich Zeit habe mal durch arbeiten und schauen das ich das ganze mit SQLite und PDO hin bekomme. Habe gestern das ganze auf die schnelle mit normalem MySql gelöst.

  • Zum einen läuft der mysqld Prozess permanent auch wenn er nicht gebraucht wird und zum andern läuft nicht nur ein Prozess, die auch noch verhälltnissmässig viel RAM+CPU schlucken


    Da der RPI aber nicht wirklich soviel hat wie "richtige" Server, solltest du lieber möglichst Resourcen-sparend arbeiten und das wäre eben so wie ps915 bereits geraten hat: lighttpd anstatt apache2 und sqlite anstatt mysql ;)


  • Da der RPI aber nicht wirklich soviel hat wie "richtige" Server, solltest du lieber möglichst Resourcen-sparend arbeiten und das wäre eben so wie ps915 bereits geraten hat: lighttpd anstatt apache2 und sqlite anstatt mysql ;)


    Ja, das ist mir schon klar, daher ist mein Ziel nach wie vor Sqlite. Apache2 benutze ich nicht. Nehme nginx, der soll wohl noch sparender sein als Lighttpd.