Aktuelles SQLite?

Alles, was PHP betrifft, kann hier besprochen werden.

Aktuelles SQLite?

Postby Brutos » 19. September 2005 21:46

Gibt es eigentlich auch die 3.x.x Versionen von SQLite für PHP?


Code: Select all
<?php
echo sqlite_libversion();;
?>


Gibt an, dass es nur eine 2.8.x Version in PHP5 drin ist.
Brutos
 
Posts: 22
Joined: 26. March 2005 13:33

Postby Wiedmann » 19. September 2005 22:33

Gibt es eigentlich auch die 3.x.x Versionen von SQLite für PHP?

Im Moment (noch) nicht.
Wiedmann
AF Moderator
 
Posts: 17106
Joined: 01. February 2004 12:38
Location: Stuttgart / Germany

Postby Brutos » 20. September 2005 17:14

Danke, dann wart ich mal, so dringend habich ja nicht...
Brutos
 
Posts: 22
Joined: 26. March 2005 13:33

Postby 1Euro » 20. September 2005 20:22

mal so ne frage qas ist der unterschied zwischen MySQLite und MySQL?

1Euro
Dies ist meine Welt!!!
1Euro
 
Posts: 188
Joined: 11. September 2004 17:50

Postby jakimo72 » 21. September 2005 10:41

MySQLite gibt es nicht.
Aber es gibt SQLite, es ist eine SQL-Datenbank, die
ohne einen eigenständigen Server auskommt.
Sie besteht nur aus einer Bibliotek, die direkt die
Datenbanken, die in Dateien abgelegt sind ansprechen.
Ohne einen Server zu arbeiten
ist von Vorteil für kleine und mittelgroße Projekte, es geht
teilweise schneller, da kein Umweg über TCP gemacht werden muss.
Für große Projekte ist das nichts, da viele parallele Zugriffe
nicht gut verarbeitet werden können.

MySQL und SQLite sind bis auf die Unterstützung
von SQL92 (in weiten Teilen) nicht kompatible. Das Problem ist aber
durch den Einsatz einer Datenbankabstraktionsschicht, z.B. Pear-DB
leicht zu umgehen, so kann man ein Projekt mit SQLite anfangen,
und wenn es zu gross und zu beliebt wird kann man einfach auf
PostgreSQL umsteigen (MySQL wird dann nicht mehr benötigt...).
User avatar
jakimo72
 
Posts: 151
Joined: 07. February 2005 13:25
Location: Hamburg-Barmbek

Postby 1Euro » 21. September 2005 14:14

hallo,
das hört sich interresant an kannst du mir vieleicht die Befehle zum speichern und auslesen dieser SQLite Datenbank sagen?

1Euro
Dies ist meine Welt!!!
1Euro
 
Posts: 188
Joined: 11. September 2004 17:50

Postby jakimo72 » 21. September 2005 17:59

Habe ich bereits erwähnt, dass ich immer PEAR-DB verwende,
um eine Datenbankabfrage zu machen? Es gibt auch andere
Datenbankabstrationsschichten, z.B. ist ADO im Moment ziemlich on-vogue,
aber für PHP finde ich Pear-DB im Moment am weitesten gereift.
Also lass fahren die mysql-, mysqli-, pgsql-, oci8- und sqlite-Befehle
und benutze für alle Datenbanken nur noch eine Schnittstelle.

Ab PHP5 ist SQLite immer dabei, für PHP4 kann man es nachinstallieren.

PEAR ist bei vielen PHP-Installationen mit dabei, ansonsten
kann man es leicht nachinstallieren. Manchmal fehlt aber auch nur
das richtige setzten des Include-Verzeichnisses in der php.ini.

Code: Select all
<?php
/**
 * Demonstation der Möglichkeiten von PEAR-DB
 * sehe auch
 * http://pear.php.net/manual/de/package.database.db.php
 */
require_once 'DB.php';

echo 'start<br>';

/**
 * Der DSN-String bezeichnet die Datenbankverbindung.
 * sehe dazu
 * http://pear.php.net/manual/de/package.database.db.intro-dsn.php
 */
$dsn = "sqlite:////tmp/egon.db";
//für Windows z.B.
//$dsn = "sqlite:///c:/temp/egon.db";
/**
 * Bei Mysql oder anderen serverbasierten Datenbanken muss die
 * Datenbank vorher existieren, für SQLite ist das nicht notwendig,
 * die Datei wird automatisch erstellt. (Schreibrechte auf das Verzeichns
 * vorrausgesetzt.)
 */
$options = array(
    'debug'       => 2,
    'portability' => DB_PORTABILITY_NONE,
);

/**
 * Verbinden mit der Datenbank
 */
$db =& DB::connect($dsn, $options);
if (PEAR::isError($db)) {
 
    die($db->getMessage());
}

/**
 * Den fetchMode global festlegen.
 * sehe dazu
 * http://pear.php.net/manual/de/package.database.db.db-common.setfetchmode.php
 */
$db->setFetchMode(DB_FETCHMODE_ASSOC);

echo 'connected<br>';

/**
 * Beispiel einer einfachen Datenbankabfrage, in diesem Fall ein create Table
 */
$res = $db->query('create table test (eins integer primary key, zwei varchar(50), drei varchar(50))');
// Always check that result is not an error
if (PEAR::isError($res)) {
 
    die($res->getMessage());
}

echo 'created<br>';


/**
 * Für Inserts und Updates gibt es ein speziellen Befehl
 * (Mit einem einfachen query würde es natürlich auch gehen)
 * seheh dazu
 * http://pear.php.net/manual/de/package.database.db.db-common.autoprepare.php
 */
$table_name   = 'test';
$table_fields = array('eins', 'zwei', 'drei');

$sth = $db->autoPrepare($table_name, $table_fields,
                        DB_AUTOQUERY_INSERT);

if (PEAR::isError($sth)) {
    die($sth->getMessage());
}

echo 'prepared<br>';

/**
 * Mysqls "AUTO INCREMENT" als auch Oracles "Create sequence" sind nicht portable,
 * aber mit Sequenzen von Pear-DB klappt es mit jeder Datenbank
 * sehe auch
 * http://pear.php.net/manual/de/package.database.db.intro-sequences.php
 */
$id = $db->nextId('mySequence');
if (PEAR::isError($id)) {
    die($id->getMessage());
}

echo 'sequence build<br>';

/**
 * Ein mit prepare oder autoPrepare vorbereitetes Statement ausführen
 * sehe dazu auch
 * http://pear.php.net/manual/de/package.database.db.intro-execute.php
 */
$res =& $db->execute($sth,array($id,'foo2','bar2'));
// Always check that result is not an error
if (PEAR::isError($res)) {
    die($res->getMessage());
}

echo 'inserted<br>';

/**
 * Wer nur mal eben eine kleine Tabelle abfragen möchte, der
 * braucht nicht Result-sets benutzen, sondern kann die
 * Kurzbefehle getAll, getRow oder getOne benutzen.
 * sehe auch
 * http://pear.php.net/manual/de/package.database.db.db-common.getall.php
 */
$data =& $db->getAll('SELECT * FROM test');

if (PEAR::isError($data)) {
    die($data->getMessage());
}

echo "<pre>";
print_r($data);
echo "</pre>\n";

echo 'end<br>';


$db->disconnect();


?>
User avatar
jakimo72
 
Posts: 151
Joined: 07. February 2005 13:25
Location: Hamburg-Barmbek

Postby 1Euro » 21. September 2005 19:00

Hallo,
hm ich muss dir sagen ich verstehe dieses Pear-DB nicht. Ich verwende bei MySQL das
Code: Select all
$sql = "Befehl";
mysql_query($sql)


Geht das damit auch? Wenn ja währe ich dir dankbar wenn du mir diese Befehle erklären würdest für SQLite.

1Euro
Dies ist meine Welt!!!
1Euro
 
Posts: 188
Joined: 11. September 2004 17:50

Postby jakimo72 » 21. September 2005 20:39

Es gibt den Befehl sqlite_query($db, $sqlstring), aber wie
gesagt ich würde lieber den Befehl $db->query($sqlstring) für
beide Datenbanken, sowohl für Mysql, als auch für SQLite verwenden.

Probiers einfach aus,
anstelle von
Code: Select all
$db = mysql_connect('localhost','heinz','miez');
if($db === false) ...
if(!mysql_select_db('mydb'))
...

kannst Du
Code: Select all
require_once 'DB.php';
$db = DB::connect($dsn);
if(PEAR::isError($db))
...

mit $dsn = 'mysql://heinz:miez@localhost/mydb';
für MySQL bzw
$dsn = 'sqlite:///c:/temp/mydb.db';
für SQLite.
(Username und Passwort wird für sqlite nicht benötigt,
die Zugriffberechtigung erledigt das Betriebssystem)

Für eine Abfrage kannst Du anstelle von
Code: Select all
$result = mysql_query($query) ;
if($result === false)
...

schreibst Du
Code: Select all
$result = $db->query($query);
if(PEAR::isError($result))
...


Und bleibt noch
Code: Select all
while ($line = mysql_fetch_array($result, MYSQL_ASSOC))
...

zu ersetzen mit
Code: Select all
while ($line = $result->fetchRow(DB_FETCHMODE_ASSOC))
...


Und wenn Du andere Datenbanken ausprobieren möchstest,
kein Problem, einfach nur den $dsn austauschen und voila.

Und wenn Du mehr über die Möglichkeiten von PEAR-DB wissen
möchtest, so musst Du wohl oder übel einmal in die Doku schauen:
http://pear.php.net/manual/de/package.database.db.php
(Leider ist die deutsche Übersetzung sehr lückenhaft, aber
grundlegende Kenntnisse im Englischen setze ich einfach mal vorraus.)

Das Beispiel aus dem vorigen Beitrag ist so kompliziert auch nicht,
und zeigt einige weitere Möglichkeiten auf. (Ich hoffe es stört nicht
allzu sehr, dass ich den Text kommentiert habe...)
User avatar
jakimo72
 
Posts: 151
Joined: 07. February 2005 13:25
Location: Hamburg-Barmbek

Postby 1Euro » 22. September 2005 12:51

mein Problem daran sind die -> und Großklein schreibung. Wenn ich eine Verbindung zu sqlite herstellen möchte wie geht das?
Und die Befehle zum lesen und schreiben wie gehen die wäre dankbar für diese Informationen.

1Euro
Dies ist meine Welt!!!
1Euro
 
Posts: 188
Joined: 11. September 2004 17:50

Postby jakimo72 » 22. September 2005 14:32

Es gibt sowas wie Objekte, das sind Dinger, in denen man etwas
abspeichern kann, wie in einem Schachtel, in der man Schokolade
speichern kann. Und diese Etwasse sind Variablen und Funktionen
(auch Methoden genannt). Um die Sachen aus dem Objekt wieder
herausholen zu können,
benötigt man das Objekt, z.B. $db und man benötigt den Namen der
Funktion, die man haben möchte. Dazu dient des "->". Also mit
$db->query(..) bekommt man eine Funktion "query()" aus dem Objekt $db.
Das Objekt $db wurde zuvor erzeugt, mit Hilfe einer weiteren Funktion
DB::Connect(..). Wobei "DB" zwar kein Objekt ist, aber eine Klasse.
Eine Klasse ist auch so eine Schachtel für Variablen und Funktionen,
aber zusätzlich so eine Art Fabrik mit einem Prototyp für ein Objekt.
Alles zusammen hört sich fürchterlich kompliziert an, aber man
kann diese Objektorientierte Progammierung doch begreifen, zumindest ist es mit geglückt.

Objekte sind etwas gutes! Sie können eben sehr für Ordnung sorgen,
so wie Schachteln. Aber sie können noch mehr, Sie können sich
Situationen anpassen. Also sage ich dem Datenbankobjekt, es soll
für eine MySQL-Datenbank zuständig sein, und in einer anderen Situation
für eine SQLite-Datenbank.

Zu dem Thema Objektorientierte Programmierung (OOP) gibt es
haufenweise gute Tutorials im Internet (leider auch schlechte) und
auch viele Bücher.

Ich kann nur raten Dir das mit der OOP anzusehen, und dann
kannt Du von den vielfältigen Möglichkeiten einer Objektbibliotek
wie PEAR nutzen ziehen.



Zur Groß und Kleinschreibung: PHP ist teilweise casesensitiv, und
unterscheidet zwischen Groß- und kleinschreibung nur bei Variablen.
Also ist $eineVar etwas anderes als $Einevar.
Dagegen wird bei Funktionen und Klassen nicht zwischen Groß- und
kleinschreibung unterschieden. Ich persönlich würde aber auf immer
peinlich genau auf die Gross- und kleinschreibung achten, schon wegen
dem Wiedererkennungswert der Funktionen. Zur besseren Lesbarkeit
werden Wörter, die aus verschiedenen Teilen zusammengesetzt sind
entweder durch massenhaft "_" unterteilt, oder durch eingestreute
Großbuchstaben (sogenannte Kamelschreibweise, mit den Großbuchstaben als Höcker).
User avatar
jakimo72
 
Posts: 151
Joined: 07. February 2005 13:25
Location: Hamburg-Barmbek

Postby 1Euro » 22. September 2005 15:11

Hallo,
weist du ich mach das Ungern mit Pear-db ich hab mich jetzt an das andere gewöhnt und möchte damit weitermachen. Wenn ich irrgendwann mal Zeit habe werde ich mir das ansehen und damit experimentieren. Aber im moment würde ich das ganze eher ohne Pear-db machen. Kannst du mir Bitte die Befehle ohne nennen? ich gehe mal davon aus das ich beim Conecten auch kein Passwort brauche wäre dankbar für Connection Syntax ...

1Euro
Dies ist meine Welt!!!
1Euro
 
Posts: 188
Joined: 11. September 2004 17:50

Postby jakimo72 » 22. September 2005 15:50

die Befehle ohne pear-db lauten sqlite_* und Du kannst sie
unter
http://de2.php.net/manual/de/ref.sqlite.php
sehen. Aber sei gewarnt, ab PHP Version 5.1 gibt es
eine neue Schnittstelle für Datenbanken (PDO), die
sehr ähnlich dem Pear-DB sein wird.
Dann sind auf einen Schlag alle mysql_* und sqlite_* Funktionen
veraltet und nur noch aus Kompatibilitätsgründen vorhanden...
User avatar
jakimo72
 
Posts: 151
Joined: 07. February 2005 13:25
Location: Hamburg-Barmbek


Return to PHP

Who is online

Users browsing this forum: No registered users and 2 guests