Datenbank für Telefonbuch

Hallo liebe IPS-Junkies,

ich habe mittlerweile meine Namensauflösung via Ö sehr komfortabel gestaltet. Sogar Firmen mit Anlagenanschlüssen können sich vor mir nicht mehr verbergen (sofern sie im Örtlichen) gelistet sind. :smiley:

Jetzt bräuchte ich allerdings eine Möglichkeit, bekannte Nummern ohne Telefonbucheintrag (Handys usw.) zu speichern.

Dabei hatte ich an eine Datenbank a la SQL gedacht. Welche ist hier sinnvoll? Ich denke da vor allem an z.B. das Kalendarium von Toni, um hinterher nicht 3 oder 4 verschiedene betreiben zu müssen. :confused:

Also lasst euren Gedanken freien Lauf!

Da ich nur wenig Erfahrungen mit dem Zugriff unter php habe, wäre ich auch für einige „php-Schnipsel“ für mein Problem dankbar. (lesen, schreiben, löschen, suchen) Eventuell hat ja schon jemand sowas gelöst. :smiley:

Gruß
Fabian

Torro hat mir fürs Kalendarium SQLite ( ist „ala SQL“) empfohlen weil Zugriffe auf SQLite auch direkt aus PHP möglich sind. Erstmal wird das Kalendarium in SQLite ausgeliefert werden. Sollte sich mit der Zeit SQLite nicht bewähren - wonach es momentan aber nicht aussieht - werde ich das aber noch ändern.

Mein Absoluter Favorit ist immernoch Firebird - für (fast) alle Bereiche!

Toni

Ich hatte es mit MySQL und einer ganz simplen Datenbank gemacht:

http://www.ip-symcon.de/forum/showpost.php?p=11100&postcount=28

Hallo

jetzt habe ich endlich mal Zeit gefunden, mich mit dem Problem Datenbanken zu beschäftigen. Allerdings habe ich bis jetzt noch nie eine neu eingerichtet.

Wie und was genau muss ich auf dem Rechner installieren, damit das SQLite läuft und womit lege ich Tabellen und dann Datenfelder in den Tabellen an. (graph. admin shell???) :confused:

Ganz untätig war ich nun nicht. Soweit ich das bis jetzt erkennen kann, muss ich eine .dll für die Datenbank einbinden (php.ini?). Ist das die unter den beim letzten Backup von paresy angesprochenen Extensions?

Ihr braucht euch nicht die Finger wund tippen, ein hilfreicher Link genügt. :rolleyes:

Gruß
Fabian

Hallo Fabian,

genau so ist es. Und fuer die Administration gibt es hier etwas.

Gruss Torro

Also die php_sqlite.dll habe ich in die php.ini eingebunden und IPS neu gestartet. Gleich beim Start kam die Fehlermeldung, dass eine php_pdo.dll vermisst wird. >> Habe ich auch ins IPS gepackt. :slight_smile:

Trotzdem kommt beim Aufruf eine Fehlermeldung: „Call to undefined function sqlite…“ :confused:

Ich habe einfach mal sqlite_libversion() probiert. Kein Erfolg. :frowning:

Woran kann es noch liegen?

Fabian

PS: hat bei der Gelegenheit mal jemand ein paar Anweisungen für einen Abfragealgo?

Hat jemand noch einen Hinweis für mich?

es gibt da leider im Moment ein ziemliches KuddelMuddel mit den sqllite versionen. Es gibt für PHP mindestens 3 verschiedene Versionen :
1.Die Basis-Extension sqllite kann nur bis sqllite2 (und gibt es eigentlich nicht für php5.1x (siehe hier), weil dort ein Fehler drin ist.
2.Die pdo (pecl)-Extension heisst php_pdo_sqllite.dll und kann Version3. Die version solltest Du nehmen. Deren Funktionen werden aber über PDO angesprochen (in etwa wie ODBC-Treiber). Das steht auch wieder im Handbuch.
3. Die Pear-DB Extensionen sqlite und sqllite3 gibt es auch noch, werden(sollen) aber durch PDO als neuen Herstellerübergreifendes Datenbankmodul ersetzt (werden).

Alles Klar?

Tommi

Das Kalendaruim, und eine weitere Datenbank für IPS (wohl) auch, werden in SQLite3 umgesetzt.

Toni

Ok, ich habe jetzt also PDO eingebunden. D.h. in der php.ini stehen zwei Extension-Einträge: php_pdo.dll und darunter php_pdo_sqlite.dll.

Jetzt habe ich aber das Problem, dass die pdo-Beschreibung hier auch etwas „Kuddel-Muddel“ ist. Zumindest verstehe ich sie nicht so richtig. :confused: (Ich habe mich noch nie mit DB-Programmierung befasst)

Ich habe folgendes probiert:

$dbh = new PDO('sqlite:/Programme/IP-Symcon/database/phonebook.sdb');
foreach ($dbh->query('SELECT * from phone') as $row)
{
   print_r($row);
}
$dbh = null;

phone ist die vorher angelegte Tabelle.

Eigentlich sollte das query den Inhalt der Tabelle als Array wiedergeben, macht es aber nicht. Folglich meckert php, dass für foreach der falsche Datentyp verwendet wird. :frowning:

Kann mir jemand mit ein paar Erläuterungen (Codezeilen) helfen. Ich sitze schon seit drei Tagen und bin keinen Schritt weiter. Will sagen, ich frage nicht bei jedem kleinen Problem und versuche immer erst selbst alle Fehler zu finden.

Gruß
Fabian

Hier sind ein paar zeilen, die den Umgang mit DBs verdeutlichen. Das ist im Prinzip bei allen DBs das gleiche, nur die SQL-Syntax und spezielle Funktionen unterscheiden sich.

HTH
Tommi

<?
define ('lf',"<br>
");

//PDOobject erzeugen(hier nur testweise) im Speicher
$dbh = new PDO('sqlite::memory:');

//Tabelle anlegen
$sql="create table test(id integer primary key,datum integer,name text)";
$dbh->exec($sql);

//1.werte in Tabelle einfügen vorbereiten
$sql="insert into test(id,datum,name) values(?,?,?)";
$sth=$dbh->prepare($sql);
//viele werte einfügen, dabei das vorher vorbereite SQL mit Parametern benutzen
for ($i=1;$i<100;$i++) {
	$id=$i;
	$datum=time();
	$name='User-'.$i;
	$sth->execute(array($id,$datum,$name));
}

//2.zählen
//das Query gibt NICHT als Array die Rows zurück, sondern nur ein Statement-Handler
$sql="select count(*) as c from test";
$sth=$dbh->query($sql);
//1 zeile holen
$result=$sth->fetch(PDO::FETCH_ASSOC);
$count =$result['c'];
//resource freigeben
$sth->closecursor();
//anzeigen
echo "Habe jetzt $count zeilen in der Tabelle".lf;

//3. letzte zeilen ausgeben
//hier mit prepare vorbereiten, $dbh->query macht prepare und execute zusammen 
$sql="select * from test where id >90";
$sth=$dbh->prepare($sql);
$sth->execute();
//genauso wie bei query das Ergebnis abholen, hier alles auf einmal
$result=$sth->fetchAll(PDO::FETCH_ASSOC);

//..und als HTML-Tabelle  ausgeben
print "<table>";
foreach ($result as $row) {
	$d=strftime("%d.%m.%Y %H:%M:%S",$row['datum']);
	print "<tr><td>".$row['id']."</td><td>".$d."</td><td>".$row['name']."</td></tr>";
}
print "</table>".lf;

//fertig
//resourcen freigeben
$sth->closecursor();
$dbh=null;
?>
	

Ein riesen Dankeschön an Tommi!

Es hat sich herausgestellt, das meine Versuche nicht falsch waren, sie haben fast alle funktioniert. :smiley:

Die verwendete Tabelle war schuld. Ich hatte sie mit externen Werkzeugen, wie z.B. dem von Torro genannten, oder (gefällt mir persönlich besser) dem SQLite Database Browser http://sqlitebrowser.sourceforge.net angelegt. Leider konnte auf diese Datenbanken nicht zugegriffen werden. Da kein Objekt erzeugt werden konnte, war natürlich auch keine DB-Operation damit möglich.

Also mit der beschriebenen Routine angelegt klappts jetzt prima! Und die Komentare zu den einzelnen Operationen sind Gold wert.

Nochmals Dank an alle, die geholfen haben :smiley: :smiley: :smiley:

Fabian

PS: das nächste Problem kommt bestimmt bald…