App installieren
How to install the app on iOS
Follow along with the video below to see how to install our site as a web app on your home screen.
Anmerkung: This feature may not be available in some browsers.
Du verwendest einen veralteten Browser. Es ist möglich, dass diese oder andere Websites nicht korrekt angezeigt werden.
Du solltest ein Upgrade durchführen oder ein alternativer Browser verwenden.
Du solltest ein Upgrade durchführen oder ein alternativer Browser verwenden.
Perl: MySQL Tabelle in Array
- Ersteller ghostadmin
- Erstellt am
ghostadmin
Grand Admiral Special
★ Themenstarter ★
Ich möchte eine MySQL Tabelle in ein Array bringen. Bekomme keine Fehlermeldung (SQL Verbindung ist auch ok) und der Dump:
print Dumper(\@temp);
bringt keinen Inhalt.
Es wird nicht einmal was ausgegeben wenn ich ausserhalb der Schleife ein
push (@temp, "test");
mache
Was könnte das sein?
print Dumper(\@temp);
bringt keinen Inhalt.
Code:
my $sth = $dbh->prepare("SELECT clid,src,dst,$cdrcalldate,billsec,disposition,uniqueid,amaflags from $mysql_tablecdr")
or die "Can't prepare SQL Statement: $DBI::errstr\n";
$sth->execute()
or die "Can't execute SQL statement: $DBI::errstr\n";
my @temp;
my $row;
while ( $row = $sth->fetchrow_array() ) {
push (@temp,$row);
}
$sth->finish();
$dbh->disconnect();
Es wird nicht einmal was ausgegeben wenn ich ausserhalb der Schleife ein
push (@temp, "test");
mache
Was könnte das sein?
BoMbY
Grand Admiral Special
- Mitglied seit
- 22.11.2001
- Beiträge
- 7.462
- Renomée
- 293
- Standort
- Aachen
- Details zu meinem Desktop
- Prozessor
- Ryzen 3700X
- Mainboard
- Gigabyte X570 Aorus Elite
- Kühlung
- Noctua NH-U12A
- Speicher
- 2x16 GB, G.Skill F4-3200C14D-32GVK @ 3600 16-16-16-32-48-1T
- Grafikprozessor
- RX 5700 XTX
- Display
- Samsung CHG70, 32", 2560x1440@144Hz, FreeSync2
- SSD
- AORUS NVMe Gen4 SSD 2TB, Samsung 960 EVO 1TB, Samsung 840 EVO 1TB, Samsung 850 EVO 512GB
- Optisches Laufwerk
- Sony BD-5300S-0B (eSATA)
- Gehäuse
- Phanteks Evolv ATX
- Netzteil
- Enermax Platimax D.F. 750W
- Betriebssystem
- Windows 10
- Webbrowser
- Firefox
Vielleicht geht fetchall_arrayref? Hab ich selber aber auch noch nicht genutzt - ich versuche Perl eher zu vermeiden ...
ghostadmin
Grand Admiral Special
★ Themenstarter ★
Es hätte @row statt $row sein müssen aber das war gar nicht das Problem, es wurde nichts ausgegeben weil ich @temp 2x deklariert hatte wtf
In meinem Skript kann man wahlweise zwischen csv oder mysql als Datenquelle wählen.
csv funktioniert alles und mysql habe ich nachträglich hinzugefügt.
Bei csv kommt nun bei:
print Dumper(@temp[0]);
eine ganze Zeile während da bei Verwendung von mysql nur ein einziges Feld kommt.
Wie kann man obiges zeilenweise ins Array speichern?
Bei unterem Abschnitt vom Code (also ab dem else) bekomme ich das zeilenweise ins Array, wo ist der Unterschied?
In meinem Skript kann man wahlweise zwischen csv oder mysql als Datenquelle wählen.
csv funktioniert alles und mysql habe ich nachträglich hinzugefügt.
Bei csv kommt nun bei:
print Dumper(@temp[0]);
eine ganze Zeile während da bei Verwendung von mysql nur ein einziges Feld kommt.
Wie kann man obiges zeilenweise ins Array speichern?
Code:
if ($cdrenablemysql eq "1") {
my $sth = $dbh->prepare("SELECT clid,src,dst,dcontext,channel,dstchannel,lastapp,lastdata,$cdrcalldate,(calldate+(duration-billsec)) AS answer,(calldate+duration) AS end,duration,billsec,disposition,amaflags,accountcode,uniqueid FROM $mysql_tablecdr ORDER BY $cdrcalldate DESC")
or die "Can't prepare SQL Statement: $DBI::errstr\n";
$sth->execute()
or die "Can't execute SQL statement: $DBI::errstr\n";
my @row;
while ( @row = $sth->fetchrow_array() ) {
push (@temp, @row);
}
#my $arrayref = $sth->fetchall_arrayref() or die "Cant fetch: $DBI::errstr\n";
#foreach (@$arrayref) {
# push (@temp,@{$_});
#}
$sth->finish();
} else {
open (CDRLOG, "<$cdrfile") || die "cannot open $cdrfile: $!";
while (<CDRLOG>) { # Load the contents of the file into an array
if (! (/OMIT/)) { # If the amaflags are NOT set to OMIT the calls from the CDR, add it to the
push (@temp, $_); # array to be processed.
}
}
close (CDRLOG); # Close the open file
}
Bei unterem Abschnitt vom Code (also ab dem else) bekomme ich das zeilenweise ins Array, wo ist der Unterschied?
BoMbY
Grand Admiral Special
- Mitglied seit
- 22.11.2001
- Beiträge
- 7.462
- Renomée
- 293
- Standort
- Aachen
- Details zu meinem Desktop
- Prozessor
- Ryzen 3700X
- Mainboard
- Gigabyte X570 Aorus Elite
- Kühlung
- Noctua NH-U12A
- Speicher
- 2x16 GB, G.Skill F4-3200C14D-32GVK @ 3600 16-16-16-32-48-1T
- Grafikprozessor
- RX 5700 XTX
- Display
- Samsung CHG70, 32", 2560x1440@144Hz, FreeSync2
- SSD
- AORUS NVMe Gen4 SSD 2TB, Samsung 960 EVO 1TB, Samsung 840 EVO 1TB, Samsung 850 EVO 512GB
- Optisches Laufwerk
- Sony BD-5300S-0B (eSATA)
- Gehäuse
- Phanteks Evolv ATX
- Netzteil
- Enermax Platimax D.F. 750W
- Betriebssystem
- Windows 10
- Webbrowser
- Firefox
2D-Array vs. 1D-Array mit String-Wert als Row?
ghostadmin
Grand Admiral Special
★ Themenstarter ★
1D-Array mit String-Wert als Row?
das ist glaube das was ich brauche, kenne mich mit Array und dem Hash Zeug leider viel zu wenig aus
Angenommen die erste Zeile aus Mysql und dem CSV wäre:
1,2,3,4,5,6
Dann spuckt mir die Variante von Mysql nur 1 aus während CSV die volle Zeile ausgibt mit print Dumper(@temp[0]);
BoMbY
Grand Admiral Special
- Mitglied seit
- 22.11.2001
- Beiträge
- 7.462
- Renomée
- 293
- Standort
- Aachen
- Details zu meinem Desktop
- Prozessor
- Ryzen 3700X
- Mainboard
- Gigabyte X570 Aorus Elite
- Kühlung
- Noctua NH-U12A
- Speicher
- 2x16 GB, G.Skill F4-3200C14D-32GVK @ 3600 16-16-16-32-48-1T
- Grafikprozessor
- RX 5700 XTX
- Display
- Samsung CHG70, 32", 2560x1440@144Hz, FreeSync2
- SSD
- AORUS NVMe Gen4 SSD 2TB, Samsung 960 EVO 1TB, Samsung 840 EVO 1TB, Samsung 850 EVO 512GB
- Optisches Laufwerk
- Sony BD-5300S-0B (eSATA)
- Gehäuse
- Phanteks Evolv ATX
- Netzteil
- Enermax Platimax D.F. 750W
- Betriebssystem
- Windows 10
- Webbrowser
- Firefox
Ja, das SQL-Gedöns gibt jede Zeile als Array von den Spalten zurück:
Also ein Array im Array.
Das andere enthält die ganze Zeile wie eingelesen:
Jedenfalls wenn ich mich nicht furchtbar vertue ...
Code:
[['1', '2', '3'],
['4', '5', '6'],
['7', '8', '9']]
Also ein Array im Array.
Das andere enthält die ganze Zeile wie eingelesen:
Code:
['1 2 3',
'4 5 6',
'7 8 9',]
Jedenfalls wenn ich mich nicht furchtbar vertue ...
ghostadmin
Grand Admiral Special
★ Themenstarter ★
Weiß nicht obs noch umständlicher geht aber jetzt habe ich die ganze Zeile wenn ich folgendes mache:
Also String in Array und nicht Array in Array.
Und die komplette Zeile wird nun wie gewünscht ausgegeben mit:
print Dumper(@temp[0]);
Die Werte sind getrennt durch die Stringfolge: ', '
Wenn ich dann einen Split mache um das wieder aufzudröseln und zu verwenden:
funktioniert das allerdings nicht, ein print $cdrentry[0]; gibt das aus:
bei der CSV Variante wird dagegen wie gewünscht ein Text ausgegeben, aber wieso?
Code:
foreach (@arrayref) {
my $arr = [ @{$_} ];
push (@temp,$arr);
}
Also String in Array und nicht Array in Array.
Und die komplette Zeile wird nun wie gewünscht ausgegeben mit:
print Dumper(@temp[0]);
Die Werte sind getrennt durch die Stringfolge: ', '
Wenn ich dann einen Split mache um das wieder aufzudröseln und zu verwenden:
Code:
for (my $i=$offset;$i<$numrecords + $offset;$i++) {
@cdrentry = split (/', '/,$temp[$i]);
...
..
funktioniert das allerdings nicht, ein print $cdrentry[0]; gibt das aus:
Code:
ARRAY(0x374be68)
Zuletzt bearbeitet:
ghostadmin
Grand Admiral Special
★ Themenstarter ★
Hier nochmal das ganze als Beispiel code
Wie bekomme ich $cdrentry normal ausgedruckt und nicht mit Array(0x.... ?
Code:
#!/usr/bin/perl
use strict;
use utf8;
use DBI;
use Config::IniHash;
use Data::Dumper;
my $configfile = ReadINI 'config.ini';
my $mysql_host = $configfile->{mysql}->{host};
my $mysql_db = $configfile->{mysql}->{db};
my $mysql_tablecdr = $configfile->{mysql}->{tablecdr};
my $mysql_user = $configfile->{mysql}->{user};
my $mysql_pwd = $configfile->{mysql}->{pwd};
my $dbh;
my $cdrcalldate = $configfile->{CDR}->{colcdrcalldate};
$dbh = DBI->connect("DBI:mysql:database=$mysql_db;host=$mysql_host",$mysql_user,$mysql_pwd,
{
RaiseError => 1,
mysql_enable_utf8 => 1
}
);
$dbh->do("SET NAMES utf8");
$dbh->do("SET CHARACTER SET utf8");
my $sth = $dbh->prepare("SELECT clid,src,dst,$cdrcalldate,billsec,disposition,uniqueid,amaflags from $mysql_tablecdr")
or die "Can't prepare SQL Statement: $DBI::errstr\n";
$sth->execute() or die "Can't execute SQL statement: $DBI::errstr\n";
my $arrayref = $sth->fetchall_arrayref() or die "Cant fetch: $DBI::errstr\n";
my @temp;
foreach (@$arrayref) {
push (@temp,[@{$_}]);
}
$sth->finish();
$dbh->disconnect();
print Dumper(\@temp[0]); #prints 1st row of table
for (my $i=0;$i<10;$i++) {
my @cdrentry = split (/', '/,$temp[$i]);
print $cdrentry[0]; #should print first item of first 10 rows, but prints array(0x....
}
Wie bekomme ich $cdrentry normal ausgedruckt und nicht mit Array(0x.... ?
Ähnliche Themen
- Antworten
- 3
- Aufrufe
- 8K
- Antworten
- 4
- Aufrufe
- 2K