Schrift
Wiki:Tipp zum Debugging: use Data::Dumper; local $Data::Dumper::Useqq = 1; print Dumper \@var;
[thread]11135[/thread]

„MySQL: Wie funktioniert UPDATE“ und „INSERT“ mit Perl

Leser: 25


<< |< 1 2 3 >| >> 21 Einträge, 3 Seiten
Gast Gast
 2008-01-13 18:07
#104670 #104670
Hallo Jungs,

möchte mir vielleicht jemand erklären wie ich von einem Formular aus Daten in einer
MySql-Datenbank speichere? Und wie ich die gespeicherten Daten aus dem Formular raus edieren kann?

Mit anderen Worten ich würde gerne wissen wie „UPDATE“ und „INSERT“ mit Perl funktioniert.
Hat da vielleicht jemand ein paar Beispiele zu? Das wäre nett!

Ich hoffe ich habe mich verständlich ausgedrückt?
Liebe Grüße Sina

/Modedit GwenDragon: Titel erweitert
Last edited: 2010-02-05 17:35:06 +0100 (CET)
renee
 2008-01-13 21:05
#104675 #104675
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
pq
 2008-01-14 01:32
#104680 #104680
User since
2003-08-04
12208 Artikel
Admin1
[Homepage]
user image
und http://perloo.de/DBI/
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
Gast Gast
 2008-01-17 14:52
#104831 #104831
Hallo Jungs,

wollte nochmal schnell danke sagen, für eure Hilfe, Danke.
Jetzt habe ich aber noch mal ein paar fragen an Euch.

Also, ich habe die Seiten die Ihr mir gegeben habt durch gearbeitet.
Und bin zu folgenden Ergebnissen gekommen, welche auch echt super funktionieren.
Jetzt wollte ich aber euch nochmal fragen, ob ich das so auch richtig mache?
Oder gibt’s da irgendeine Sicherheit relevante Änderung durchzuführen?

Code (perl): (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
my $dbh = &db_open("portal", "root", "pass");
my $sth = &db_abfrage($dbh, "SELECT ps_id, ps_mainside, ps_mainname FROM portalsides");

#Update
my $sql = "UPDATE portalsides SET ps_mainside = '".$mainside."' WHERE ps_id = '".$id."'";
$dbh->do($sql) or die("Daten konnte nicht gespeichert werden. $DBI::errstr");

#Insert
my $sql = qq|INSERT INTO portalsides (ps_mainside, ps_mainname) VALUES ('$mainside', '$mainname')|;
$dbh->do($sql) or die("Daten konnte nicht gespeichert werden. $DBI::errstr");

#Delete
my $sql = qq|DELETE FROM portalsides WHERE ps_id=$id|;
$dbh->do($sql) or die("Session konnte nicht gespeichert werden. $DBI::errstr");

#Ausgabe Beispiel 
my $allref = $dbh->selectall_arrayref($sth, { Slice=>[] });
foreach my $psides (@$allref) {
$html{'home'} .= $psides->[1];
}

#Sub_R.
sub db_open {
my ($db, $user, $passwort) = @_;
my $dsn = "DBI:mysql:database=$db";
my $dbh = DBI->connect($dsn, $user, $passwort);
die ("Verbindung zur Datenbank konnte nicht hergestellt werden:\n$DBI::errstr") if (!defined($dbh) or $dbh eq "");
return $dbh;
}

sub db_abfrage {
my $dbh = shift;
my $sql = shift;
my $sth = $dbh->prepare("$sql") or die($dbh->errstr);
$sth->execute or die($sth->errstr);
return $sth;
}



Perl ist voll gut! :)
Liebe Grüße Sina
nepos
 2008-01-17 15:23
#104836 #104836
User since
2005-08-17
1420 Artikel
BenutzerIn
[Homepage] [default_avatar]
1. & vor Funktionsaufrufen ist eigentlich unnötig.
2. Lies dir in der DBI-Doku mal die Punkte zum Thema Platzhalter durch. Deine Statements sind in der jetzigen Form anfällig für SQL-Injection, da die Daten ohne vorheriges Escaping übernommen werden!
Besser wäre sowas:
Code (perl): (dl )
1
2
my $sql = "UPDATE portalsides SET ps_mainside=? WHERE ps_id=?";
$dbh->do($sql, undef, $mainside, $id) or die("Daten konnte nicht gespeichert werden. $DBI::errstr");


Das undef bei do() wird benötigt, da do() an zweiter Stelle normal einen Hash erwartet.
Wenn du Platzhalter benutzt, übernimmt das DBI-Modul bzw. das dahinterliegende datenbankspezifische Modul das nötige Escaping von Werten.

3. Statt
Code (perl): (dl )
1
2
3
4
my $allref = $dbh->selectall_arrayref($sth, { Slice=>[] });
foreach my $psides (@$allref) {
    $html{'home'} .= $psides->[1];
}


könntest du auch eine while-Schleife mit fetchrow_arrayref() benutzen. Vorteil hierbei ist, dass du die Daten nicht komplett in den Speicher holen musst, bevor du sie weiter verarbeitest,

4.
Code (perl): (dl )
my $sth = $dbh->prepare("$sql") or die($dbh->errstr);

Hier musst du $sql nicht mit Anführungszeichen versehen. Einfach direkt übergeben reicht auch.
SinaMeiyer
 2008-01-17 20:31
#104867 #104867
User since
2008-01-17
11 Artikel
BenutzerIn
[default_avatar]
Hallo Jungs,

finde ich echt super, dass einem Hier so geholfen wird.
Großes Dankeschön an alle.



LG Sina :)
Gast gast
 2010-02-05 17:28
#131874 #131874
Quote
könntest du auch eine while-Schleife mit fetchrow_arrayref() benutzen. Vorteil hierbei ist, dass du die Daten nicht komplett in den Speicher holen musst, bevor du sie weiter verarbeitest.

Hallo, habe dazu auch mal ein paar Fragen und zwar:
1. Wie sieht denn ein Beispiel damit aus?
2. Wie sieht denn die Perfekte Lösung für eine Abfrage aus?


MFG
renee
 2010-02-05 17:32
#131875 #131875
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
Zu 1.:

Code (perl): (dl )
1
2
3
4
5
6
7
8
use Data::Dumper;
my $stmt = "SELECT ...";
my $sth = $dbh->prepare( $stmt ) or die $dbh->errstr;
$sth->execute() or die $dbh->errstr;

while( my $row = $sth->fetchrow_arrayref ) {
  print 'naechste Zeile: ' . Dumper( $row );
}


Zu 2.: Was verstehst Du unter perfekt?
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/
pq
 2010-02-05 17:34
#131876 #131876
User since
2003-08-04
12208 Artikel
Admin1
[Homepage]
user image
Guest gast
1. Wie sieht denn ein Beispiel damit aus?

ein beispiel für fetchrow_(array|hash)ref findest du in dem schon weiter oben verlinkten tutorial http://perloo.de/DBI/.
am besten erstmal durchlesen, dann hast du schon ein paar grundlagen für weitere fragen.
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
GwenDragon
 2010-02-05 17:36
#131877 #131877
User since
2005-01-17
14784 Artikel
Admin1
[Homepage]
user image
Guest Gast
Hallo Jungs,
Hier sind auch programmierende Grrrls!
Wehe, du sagst noch mal Jungs. ;)

Eine Seite, in der der Umgang mit MySQL und Perl erklärt ist, findest du auch bei Prof. Plate. Ist nicht nagelneu, aber verständlich.
Last edited: 2010-02-05 17:41:02 +0100 (CET)
<< |< 1 2 3 >| >> 21 Einträge, 3 Seiten



View all threads created 2008-01-13 18:07.