Am 26.06.2013 16:25, schrieb David Haller:
Hallo,
Am Tue, 25 Jun 2013, Sebastian Reinhardt schrieb: [..]
my $sth = $dbh->prepare(qq(SELECT PARTNO FROM Pricelist)); $sth->execute(); Wenn ich nun aber versuche anhand der Artikelnummer eine Datenzeile auszulesen, dann kommt nichts: foreach(@part_no) { my $tmp_var = $_; my $stmt = "SELECT * FROM Pricelist WHERE 'partno' = '$tmp_var'"; $sth = $dbh->prepare(qq(SELECT * FROM Pricelist WHERE 'PARTNO' = '$tmp_var')); $sth->execute(); print "Partno:".$_."=>"; while(my $row = $sth->fetchrow_array()) { foreach (@$row) { $_ = '' unless defined } print "@$row\n"; } $sth->finish(); print "\n"; } Es kommt nur: Partno:0000000015=> Du verwendest nicht 'use warnings; use strict;'.
while(my $row = $sth->fetchrow_array())
hier holst du dir ein Array (bzw. das erste Element oder so, siehe nebenan), verwendest es dann aber als Arrayref:
foreach (@$row) { $_ = '' unless defined }
Siehe
@row_ary = $sth->fetchrow_array; $ary_ref = $sth->fetchrow_arrayref;
in man DBI. Das mit "array_ref" stand da auch schon drin. Ich habe schon einige Abende dran gesessen...hat nur nicht funktioniert.
Ausserdem solltest du prepared statements verwenden:
my $sth = $dbh->prepare("SELECT * FROM Pricelist WHERE 'PARTNO' = ?); $sth->execute($tmp_var); while(my $row = $sth->fetchrow_arrayref()) { print join(", ", @{$row}), "\n"; } $sth->finish(); print "\n";
Oder so.
HTH, -dnh
Danke, das Ihr Euch Gedanken gemacht habt, aber wie bereits erwähnt, hat sich das heute nach dem Mittag geklärt. Es werden jetzt neue Textdateien bereitgestellt, die ich nun verabreite und damit das Problem umgehe. -- Mit freundlichen Grüßen Sebastian Reinhardt -- Um die Liste abzubestellen, schicken Sie eine Mail an: opensuse-de+unsubscribe@opensuse.org Um den Listen Administrator zu erreichen, schicken Sie eine Mail an: opensuse-de+owner@opensuse.org