Schrift
[thread]3768[/thread]

DBI:mysql Problem

Leser: 1


<< >> 9 Einträge, 1 Seite
Gast Gast
 2007-01-23 20:22
#35131 #35131
Hallo,

ich habe Daten aus HTML-Seiten extrahiert und in einer Textdatei abgelegt. Werte sind mit einem Semikolon und Datensätze durch einen Zeilenumbruch getrennt.

Ich will die Daten jetzt mit folgendem Script aus der Textdatei in eine MySQL-Datenbank schreiben.

$sth = $dbh->prepare( "INSERT INTO log (waypoint,date,name,type) VALUES (?,?,?,?)" )
|| die "Statement kann nicht vorbereitet werden! $dbh->errstr \n";
open (CSV, $datei);
while(<CSV>) {
chomp;
my ($wp,$date,$name,$type) = split /;/;
$sth->execute( $wp, $date, $name, $type )
|| die "Kann Datensatz nicht schreiben! $sth->errstr \n";
}
$sth->finish();
$dbh->disconnect();
close (CSV);

Das Script wird auch ohne Fehlermeldung abgearbeitet und man kann die Daten auch über "print" ausgeben. Nur in der Datenbank erscheinen die Datensätze nicht!

Ich weiß jetzt auch nicht mehr wo ich suchen soll, da ich keine Fehlermeldung bekomme obwohl ich alle Möglichkeiten dazu aktiviert habe.

Danke!

Mike
MisterL
 2007-01-23 20:51
#35132 #35132
User since
2006-07-05
334 Artikel
BenutzerIn
[default_avatar]
Guten Abend.

Zum Vergleich ein Codestück aus der Küche des Meisters:
http://www.foo-magazin.de/download.cgi?issue=6 (siehe die Syntax zum SELECT Befehl auf Seite 4)

Im dem Gezeigten scheint nämlich einiges davon zu fehlen...

Gruss MisterL
“Perl is the only language that looks the same before and after RSA encryption.”
nepos
 2007-01-23 22:16
#35133 #35133
User since
2005-08-17
1420 Artikel
BenutzerIn
[Homepage] [default_avatar]
Hm, für mich sieht der Ausschnitt vom Code absolut ok aus eigentlich.
Kann es sein, dass du eventuell mit Commit arbeiten musst (falls die Tabelle InnoDB oder ähnliches ist, was Transaktionen unterstützt)?
renee
 2007-01-23 22:44
#35134 #35134
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
Kann es sein, dass das Öffnen der Datei fehlschlägt? Mach mal aus
Code: (dl )
open (CSV, $datei);
das hier:
Code: (dl )
open (CSV,"<", $datei) or die $!;


Hast Du Wiki:[tt]strict[/tt] und warnings drin?
OTRS-Erweiterungen (http://feature-addons.de/)
Frankfurt Perlmongers (http://frankfurt.pm/)
--

Unterlagen OTRS-Workshop 2012: http://otrs.perl-services.de/workshop.html
Perl-Entwicklung: http://perl-services.de/
Perlator
 2007-01-24 00:47
#35135 #35135
User since
2007-01-23
5 Artikel
BenutzerIn
[default_avatar]
Hallo,

danke für alle Antworten!

Ja, nepos hat recht. Ich habe beim connecten auf "AutoCommit => 0" gestellt ohne die eigentliche Bedeutung zu erkennen.

Hatte es schon bei "perldoc DBI" gelesen, konnte aber nicht antworten, da es hier Probleme bei der Registrierung gab. Aber Renèe hat es jetzt hinbekommen.

Habe jetzt das Ende so:

$sth->finish();
$dbh->commit();
$dbh->disconnect();
close (CSV);

gestaltet und hoffe die Reihenfolge stimmt so.

Meine auto_increment Spalte wurde übrigens bei jedem Versuch gefüllt.

Mike
nepos
 2007-01-24 11:36
#35136 #35136
User since
2005-08-17
1420 Artikel
BenutzerIn
[Homepage] [default_avatar]
Hm, normal benutzt MySQL keine Transaktionen, da sollte das auch mit AutoCommit=>0 klappen. Aber 100% sicher bin ich mir da ned.
Ich selbst arbeite meistens mit PostgreSQL.
pq
 2007-01-24 12:34
#35137 #35137
User since
2003-08-04
12208 Artikel
Admin1
[Homepage]
user image
[quote=nepos,24.01.2007, 10:36]Hm, normal benutzt MySQL keine Transaktionen, da sollte das auch mit AutoCommit=>0 klappen.[/quote]
woher hast du denn das?
MyISAM kann keine transaktionen, InnoDB dagegen schon, und das
auch schon länger.
Always code as if the guy who ends up maintaining your code will be a violent psychopath who knows where you live. -- Damian Conway in "Perl Best Practices"
lesen: Wiki:Wie frage ich & perlintro Wiki:brian's Leitfaden für jedes Perl-Problem
Perlator
 2007-01-24 12:49
#35138 #35138
User since
2007-01-23
5 Artikel
BenutzerIn
[default_avatar]
[quote=pq,24.01.2007, 11:34]MyISAM kann keine transaktionen, InnoDB dagegen schon, und das
auch schon länger.[/quote]
Genauer gesagt seit Version 3.23. Habe ich allerdings gerade erst nachgelesen, da ich mich mit dem Thema noch nicht beschäftigt habe.

Bei den Fehlversuchen hätte ich wohl ein ROLLBACK machen müssen um das AUTO_INCREMENT Feld nicht anwachsen zu lassen. Da ich aber keine Fehlermeldung bekommen habe war mit das nicht klar.

@renee: Ja ich habe alle mir bekannten Fehlerkanäle aktiviert, was man nicht sehen konnte, da ich nur das Ende des Scripts kopiert habe. Obwohl der entscheidende Teil ja nun am Anfang stand. :-)

Mike
nepos
 2007-01-24 13:12
#35139 #35139
User since
2005-08-17
1420 Artikel
BenutzerIn
[Homepage] [default_avatar]
[quote=pq,24.01.2007, 11:34][quote=nepos,24.01.2007, 10:36]Hm, normal benutzt MySQL keine Transaktionen, da sollte das auch mit AutoCommit=>0 klappen.[/quote]
woher hast du denn das?
MyISAM kann keine transaktionen, InnoDB dagegen schon, und das
auch schon länger.[/quote]
Jaja, nur nutzen soweit ich das sehe die meisten MySQL-Geschichten, zumindest im Webumfeld, doch oft noch MyISAM.
Ich weiß, dass MySQL da mittlerweile mal mehr kann...
<< >> 9 Einträge, 1 Seite



View all threads created 2007-01-23 20:22.