Archiv verlassen und diese Seite im Standarddesign anzeigen : Tabellen einfügen, mit Datensätzen füllen
Overlord04
18-08-2005, 20:53
Hi,
weiss garnicht, ob ich das jetzt ins Datenbank- oder ins PHP-Forum schreiben soll, aber habe mich jetzt für hier entschieden.
Meine Aufgabenstellung sieht so aus, dass ich aus Textdateien Datensätze auslesen und in einer Datenbank ablegen möchte.
Die Namen der Textdateien sollen dann automatisch die Namen der jeweiligen Tabellen sein.
Mein erstes Problem ist, dass ich einer vorher erstellten Datenbank einfach keine Tabelle hinzufügen kann.
Das Erstellen einer Tabelle funktioniert nur, wenn die Datenbank gerade unmittelbar erstellt worden ist, also nicht bei einer schon vorhandenen.
Mein Code zum Erstellen der Tabelle sieht so aus:
$server = "localhost";
$user = "root";
$pass = "";
$dbName = "fh";
$conn = @mysql_connect($server, $user, $pass);
@mysql_select_db($dbName, $conn);
$query = "CREATE TABLE `test` (
`key` VARCHAR( 25 ) NOT NULL ,
PRIMARY KEY ( `key` )
)";
$result = mysql_query($query);
Mein zweites Problem ist an der Umsetzung der Datensatzfüllung.
Die Datensätze der unterschiedl. Dateien haben nämlich nicht alle die selbe Anzahl. Also müsste ich das Erstellen der Tabellen dynamisch realisieren.
Das Hinzufügen der einzelnen Spalten dürfte wohl mit ADD COLUMN oder so in einer Schleife hinzubekommen sein. Also Anzahlunabhängig.
ABER: Wie fülle ich das dynamisch ?
Mit Explode kann ich ja bequem die Datensätze splitten aber wie sieht ein dynamischer Insert-Befehl aus ??
Ich muss bei einem Insert-Befehl doch immer die komplette Anzahl von Werten für die Columns angeben oder nicht ?
Wie setzt man das in einer Schleife oder so um ??
Hoffe, dass ich mich verständlich ausdrücken konnte und ihr mir helfen könnt.
Danke schon mal im Voraus
Overlord
quinte17
18-08-2005, 21:03
warum du keine daten später dazutun kannst, ist mir schleierhaft...
die columns mit alter table syntax dazutun..
rest darfst erstmal du machen :D
wenn noch probleme auftachen dann schreib *gg*
Overlord04
18-08-2005, 21:17
warum du keine daten später dazutun kannst, ist mir schleierhaft...
die columns mit alter table syntax dazutun..
rest darfst erstmal du machen :D
wenn noch probleme auftachen dann schreib *gg*
Ja, mit alter table - das war ja nicht das Problem :D
Erst mal ne table haben... :cool:
Ich poste hier mal den "kompletten" (habe das Filehandling, Abfragen, etc. rausgenommen).
Es wird also bei einem nicht schon Vorhandensein der Datenbank diese erstellt und danach EIGENTLICH eine table hinzugefügt, was aber wie gesagt nur funktioniert, wenn die Datenbank noch nicht vorhanden war.
<?php
//error_reporting(0);
// database
$server = "localhost";
$user = "root";
$pass = "";
$filename = "file123";
$dbName = "TestDatenbank";
// create database, if not already exists
// establish and test connection
$conn = @mysql_connect($server, $user, $pass);
if ($conn!=TRUE)
{
echo "Verbindungsfehler: ".mysql_error()." !! Versuchen Sie es zu einem späteren Zeitpunkt nochmals.";
die;
}
// check if database already exists. if not: create database
$exist = @mysql_select_db($dbName, $conn);
if($exist!=TRUE){
$query = "CREATE DATABASE `$dbName`";
//echo mysql_error();
$result = mysql_query($query);
if ($result!=TRUE)
{
echo "Fehler beim Erstellen der Datenbank. Möglicherweise ist der Server nicht gestartet.";
die;
}}
// create table
$conn = @mysql_connect($server, $user, $pass);
@mysql_select_db($dbName, $conn);
$query = "CREATE TABLE `test` (
`key` VARCHAR( 25 ) NOT NULL ,
`col1` INT( 3 ) NOT NULL ,
`col2` INT( 3 ) NOT NULL ,
`col3` INT( 3 ) NOT NULL ,
`col4` VARCHAR( 15 ) NOT NULL ,
PRIMARY KEY ( `key` )
) TYPE = MYISAM ;";
$result = mysql_query($query);
?>
Overlord04
19-08-2005, 00:33
OK,...
1. Problem gelöst:
War aufgrund von MySQLCC, das mir das einfach nicht angezeigt hat. Mit phpMyAdmin funktioniert es nun tadellos.
Ist jetzt nur noch die Frage, wie ich einen Insert-Befehl so ausführen lasse, dass ich einzelne Columns ansprechen kann und nicht immer alle Columns zusammen in diesem Befehl haben muss. Ist das möglich ?
quinte17
19-08-2005, 05:55
insert into tabelle (spalte1,spalte2) values ("wert1",zahl1);
noch was zu deinem php-code.
bitte verwende nicht mehrfach mysql-connect vor allem, wenn du nicht unterschiedliche connections verwendest (andere resource variablen)
und am ende der datei die connections auch noch schließen
ansonsten noch viel spaß :)
greetz
insert into tabelle (spalte1,spalte2) values ("wert1",zahl1);
das funxt natürlich nur, wenn die spalten, die nicht angesprochen werden
a) NULL-Werte aufnehmen dürfen
od.
b) für die spalte ein default-wert festgelegt ist.
in deinem fall würde die query sheitern, da alle spalten mit der Einschränkung "NOT NULL" deklariert sind.
quinte17
19-08-2005, 12:00
also warum würde des bei mir scheitern??
ich habe keinen desc oder create table hier abgeliefert, dass du des wissen könntest. und desweiteren ist mein insert nur schematisch und nicht auf seine situation angepasst.
wie er seine tabelle zu befüllen hat sollte er ja doch wissen.
wenn er felder mit create-table anlegt, dann sollte er auch wissen, dass not-null felder auch werte beinhalten müssen.
greetz
Overlord04
19-08-2005, 16:34
Danke quinte17,
werde das jetzt mal so probieren, wie Du es geschrieben hast.
Die Mehrfach-Connections habe ich rausgeschmissen.
P.S.: Not Null ist bei mir nur das Schlüsselfeld. Nicht wirklich sinnvoll, aber mit den Textdateien kein Problem.
OK - Habe es jetzt so probiert, aber dann kommt das, was ich schon befürchtet hatte.
Wenn ich die Columns nacheinander durchgehen will und die mit INSERT füllen will, so funktioniert dieses nicht. Jeder neue INSERT-Befehl hat zur Folge, dass er in die nächste Zeile, also in den nächsten Datensatz springt.
Es sieht also so aus, als wenn dann ein Füllen für eine Zeile doch in nur einem INSERT-Befehl geschehen muss, was mir dann aber Probleme bereitet, da ich
dieses ja in einer Schleife machen möchte.
Oder soll ich dann in der Schleife nur den INSERT-Befehl bauen und dann außerhalb ausführen?
quinte17
19-08-2005, 17:24
wenn du ein und den selben satz verändern willst, hat das dann schon nichts mehr mit dem erzeugen zu tun.
insert = einfügen (neuen satz erstellen)
update = aktualisieren (satz ändern)
beim update allerdings muss dein where satement stimmen, damit du nicht alle felder über alle zeilen hinweg veränderst (ist anfängerfehler nummer 1 :D)
ich empfehle dir in der schleife einen insert zu bauen, und den dann danach an die db zu schicken. somit musst du dich nicht mit where informationen vom letzten satz ärgern..
trotzdem noch eine update syntax:
update tabelle set spalte="wert", spalte3="wert" where uniquekey_spalte=1
greetz
Overlord04
19-08-2005, 19:00
Ja richtig.
Insert ist neuer Satz. Hätte da ein Update machen müssen.
Habe es jetzt aber einfach so gelöst, wie schon geschrieben.
In den Schleifen den Insert gebaut und dann außerhalb abgeschickt.
Jetzt funktioniert es wunderbar :)
Danke für die Hilfe.
Gruss Overlord
also warum würde des bei mir scheitern??
ich habe keinen desc oder create table hier abgeliefert, dass du des wissen könntest. und desweiteren ist mein insert nur schematisch und nicht auf seine situation angepasst.
wie er seine tabelle zu befüllen hat sollte er ja doch wissen.
wenn er felder mit create-table anlegt, dann sollte er auch wissen, dass not-null felder auch werte beinhalten müssen.
greetz
@quinte17
der angesprochende warst nich du , sondern der originalposter Overlord04.
und im vorfeld gab's da schon irgendwo ein "create table..". dass deine aussage korrekt ist habe ich niemals angezweifelt... ;)
Mein Satz war einfach nur als hinweis gedacht...
quinte17
23-08-2005, 13:13
ok :D schwamm drüber
(einfach öffter mal die @name schreibweise verwenden *gg*)
greetz
Powered by vBulletin® Version 4.2.5 Copyright ©2025 Adduco Digital e.K. und vBulletin Solutions, Inc. Alle Rechte vorbehalten.