SQLite CSV
Comma separated values
Schnell und einfach kann ich eine andere Tabelle in SQLite einlesen, vorausgesetzt ich habe sie in einem Zwischenformat abgespeichert, welches die Feldwerte (Kolonnen) durch ein eindeutiges Zeichen (dem Namen nach ein Komma) trennt.
Meine sqlite.csv Datei ist eine reine Textdatei (7-bit ASCII), in der ein Tabelleninhalt steht.
Die Trennung der Kolonnen besteht aus jeweils einem ";" (Semikolon), es ist aber auch ein "|" (Pipe) möglich
- das Zeichen darf im Zellinhalt nicht vorkommen.
Ebenso zu vermeiden ist ein "'" im Text, es würde im sqlite_query einen Syntaxerror erzeugen:
'Warning: sqlite_query() [function.sqlite-query]: near "n": syntax error ...'
1;Da komm ich her:;Aus dem Weltenmeer. 2;Da geh ich hin:;Als Schmetterling. 3;Da wünsch ich mir:;Ein Lied von dir. 4;Da blieb mir noch:;Ein Sommerloch. 5;Da kommst nun du daher:;Ich fress nen Teddybär. 6;Da das reicht:;Sonst wird es seicht.
Die Datensätze aus der csv-Datei füge ich nur der Tabelle hinzu, wenn die Datenbank 'SQLite/db_test.db' mit der Tabelle 'tb_test' vorhanden ist. Falls nicht, wird zwar die Datenbank erzeugt aber die Tabelle nicht (Tabelle erstellen).
<?php
// Einlesen
$db = sqlite_open("SQLite/db_test.db", 0666, $error)
or die("Fehler beim Öffnen der Datenbank: $error");
$csv_handle = fopen("sqlite.csv","r");
while ( ($data = fgetcsv ($csv_handle, 1000, ";")) !== FALSE ) {
$sql = "INSERT INTO tb_test VALUES(NULL,'$data[1]', '$data[2]')";
sqlite_query($db,$sql);
}
fclose ($csv_handle);
sqlite_close($db);
?>
sqlite_num_rows
| 1 | Da komm ich her: | Aus dem Weltenmeer. |
| 2 | Da geh ich hin: | Als Schmetterling. |
| 3 | Da wünsch ich mir: | Ein Licht von dir. |
| 4 | Da blieb mir noch: | Ein Sommerloch. |
| 5 | Da komm ich her: | Aus dem Weltenmeer. |
| 6 | Da geh ich hin: | Als Schmetterling. |
| 7 | Da wünsch ich mir: | Ein Lied von dir. |
| 8 | Da blieb mir noch: | Ein Sommerloch. |
| 9 | Da kommst nun du daher: | Ich fress nen Teddybär. |
| 10 | Da das reicht: | Sonst wird es seicht. |
Das ging so:
<?php
// Ausgeben
echo "<p>Die in SQLlite eingelesene csv-Datei als HTML-Tabelle ausgegeben:</p>";
$db = sqlite_open("SQLite/db_test.db");
$sql = 'SELECT * FROM tb_test WHERE id > 0 ORDER BY id ASC';
$result = sqlite_query($db, $sql);
if(sqlite_num_rows($result) > 0){
echo "<table>"";
while($row = sqlite_fetch_array($result)) {
echo "<tr><td>".$row['id']."</td><td>".$row['col_1']."</td><td>".$row['col_2']."</td></tr>";
}
echo "</table>";
}
?>