Schrift
[thread]3648[/thread]

INSERT ....VALUES über Variablen einlesen?

Leser: 1


<< >> 10 Einträge, 1 Seite
Gast Gast
 2005-12-23 14:10
#33877 #33877
Hallo,

ich möchte in eine MySQL-Datenbank mit dem INSERT
Befehl mit PERL hinter VALUES(Variblennamen,....) eingeben.
Das funktioniert leider nicht.
Weiß jemand Rat?

Gruß
Werner
nepos
 2005-12-23 15:22
#33878 #33878
User since
2005-08-17
1420 Artikel
BenutzerIn
[Homepage] [default_avatar]
Uhm, bisschen ungenau :P
Normal machst du das mit Platzhaltern, also etwa so
Code: (dl )
1
2
3
4
5
6
7
8
$dbh->do(
 qq{INSERT INTO tabelle (Feld1,Feld2,Feld3,Feld4) VALUES(?,?,?,?)},
 undef,
 $wert1,
 $wert2,
 $wert3,
 $wert4
);


Naeheres findest du in
Code: (dl )
perldoc DBI
.
Ach ja, was genau klappt denn bei dir nicht?
Wie sieht der Code aus und welche Fehlermeldung kommt?

Fehlt natuerlich noch das Abfangen von Fehlern usw.
Andere Moeglichkeit waere:
Code: (dl )
1
2
my $sth = $dbh->prepare(qq{INSERT INTO tabelle (Feld1,Feld2,Feld3,Feld4) VALUES(?,?,?,?)});
$sth->execute($wert1,$wert2,$wert3,$wert4);
weperl
 2005-12-23 19:30
#33879 #33879
User since
2005-12-23
20 Artikel
BenutzerIn
[default_avatar]
Hallo Nepos,

dankeschön für  Deine Codezeilen. Damit funktioniert es
wunderbar. Bist schon klasse!!
Ich habe gestern Nacht 3 Stunden damit verbracht. Bin
halt noch PERL-Neuling.
Ich wünsche Dir ein frohes Weihnachtsfest!

Gruß
Werner
pug
 2006-01-02 12:34
#33880 #33880
User since
2005-08-17
91 Artikel
BenutzerIn
[default_avatar]
Ich habe ein ähnliches Problem. Ich möchte die Eingaben von einer Website in eine Datenbank schreiben.
Code: (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
#!/usr/bin/perl

use warnings;
use strict;
use CGI;
use DBI;

my $obj = new CGI;

my $dbh = DBI->connect ( "DBI:Pg:dbname=test1", "postgres", "sonderbar" )
or die "Keine Verbindung mit der DB!\n";

my $vorname = $obj->param ( "vorname" );
my $nachname = $obj->param ( "nachname" );
my $strasse = $obj->param ( "strasse" );
my $plz = $obj->param ( "plz" );
my $wohnort = $obj->param ( "wohnort" );
my $email = $obj->param ( "email" );

$dbh->do ( "INSERT INTO test1 VALUES ( '$vorname', '$nachname', '$strasse', '$plz', '$wohnort', '$email' )" );

print $obj->header ( "text/html" ),
$obj->start_html ( -title => "Bestätigung" );

print $obj->h3 ( "Das haben Sie eingegeben! \n" );
print $obj->h5 ( $vorname, " ", $nachname );
print $obj->h5 ( $strasse );
print $obj->h5 ( $plz, " ", $wohnort );

print $obj->end_html;

$dbh->disconnect();

exit;


Das Skript läuft ohne zu murren durch, aber es wird nichts in die Datenbank (PostgreSQL) eingetragen. Warum geht es so nicht und .... verzeiht mir die dumme Frage... was ist das "qq"? Eine andere Art von qw?

Ein anderes Problem ist noch, daß bei der Ausgabe der Nachname nicht erscheint!?!

Gruss Christian
Ein Betriebssystem sie zu knechten, sie alle zu finden, Ins Dunkel zu treiben und ewig zu binden.

William Gates III
Dubu
 2006-01-02 13:44
#33881 #33881
User since
2003-08-04
2145 Artikel
ModeratorIn + EditorIn

user image
Dein Code ist schwer anfaellig fuer SQL-Injections.
Benutze besser Platzhalter, wie oben schon gezeigt wurde.

Das "qq" entspricht doppelten Anfuehrungszeichen, siehe perlop, Abschnitt "Quote and Quote like Operators".

Und bist du dir sicher, dass Datenbank und Tabelle beide "test1" heissen?
pug
 2006-01-02 16:11
#33882 #33882
User since
2005-08-17
91 Artikel
BenutzerIn
[default_avatar]
Quote
Und bist du dir sicher, dass Datenbank und Tabelle beide "test1" heissen?

Ohhh ich Kamel, ach nein das sollte ich hier nicht sagen, ich meine ich... Hornochse. Nein, die Tabelle heist 'kunde'.

Wie dem auch sei, ich habe jetzt das eingetragen:
Code: (dl )
1
2
3
4
5
6
7
8
$dbh->do( qq{INSERT INTO kunde (v_name, n_name, strasse, plz, wohnort, email) VALUES(?,?,?,?,?,?)},
$vorname,
$nachname,
$strasse,
$plz,
$wohnort,
$email
);


Aber das hat auch nicht geklappt, aber immerhin gibt es jetzt eine Fehlermeldung:
Quote
DBI::st=HASH(0x821c340)->_prepare(...): attribute parameter 'thoams' is not a ha
sh ref at /usr/lib/perl5/DBD/Pg.pm line 172.

...wobei 'thoams' der Vorname ist, den ich in das Webformular eingetragen habe.
Also ich habe das Prinzip noch nicht so ganz verstanden!?!!

Gruss Christian\n\n

<!--EDIT|pug|1136211203-->
Ein Betriebssystem sie zu knechten, sie alle zu finden, Ins Dunkel zu treiben und ewig zu binden.

William Gates III
nepos
 2006-01-02 19:32
#33883 #33883
User since
2005-08-17
1420 Artikel
BenutzerIn
[Homepage] [default_avatar]
Ist auch klar :)
Das undef bei meinem Beispiel war nicht nur zum Spass dabei ;)
Code: (dl )
$rows = $dbh->do($statement, \%attr, @bind_values) or die...
steht in der Doku zu DBI.
Wofuer dieser Hash fuer die Attribute nun genau da sein soll, frag mich nicht, hab den noch nie genutzt.

So wirds dann auf jeden Fall klappen:
Code: (dl )
1
2
3
4
5
6
7
8
9
$dbh->do( qq{INSERT INTO kunde (v_name, n_name, strasse, plz, wohnort, email) VALUES(?,?,?,?,?,?)},
undef,
$vorname,
$nachname,
$strasse,
$plz,
$wohnort,
$email
);
\n\n

<!--EDIT|nepos|1136223433-->
pug
 2006-01-02 19:48
#33884 #33884
User since
2005-08-17
91 Artikel
BenutzerIn
[default_avatar]
Jep, so gehts.

Nur der Nachname wird immer noch verschluckt. Komisch. Aber das liegt definitiv nicht an DBI sondern eher an CGI!

Gruss Christian
Ein Betriebssystem sie zu knechten, sie alle zu finden, Ins Dunkel zu treiben und ewig zu binden.

William Gates III
esskar
 2006-01-02 21:01
#33885 #33885
User since
2003-08-04
7321 Artikel
ModeratorIn

user image
bist du sicher, dass das feld "nachname" heißt? Also genauso geschrieben?
pug
 2006-01-06 14:44
#33886 #33886
User since
2005-08-17
91 Artikel
BenutzerIn
[default_avatar]
Sorry, daß ich erst jetzt antworte.
Das Problem war wirklich, wie konnte es auch anders sein, ein Problem mit den Parameter-Namen. In meinem Home-Verzeichnis hatte ich eine Version dieser statischen Seite, in der alle Namen richtig waren, aber im Home-Verzeichnis von Apache /var/www/..., war noch eine ältere Version, und da hatte der Nachname noch eine andere Bezeichnung.
Tja aufgefallen ist mir das, als ich am Dienstag gerade bei den Perl Mongers Frankfurt ( zum Treffen ) angekommen bin.
Also nur durch deren Anwesenheit war ich dazu befähigt diesen Fehler von mir zu erkennen ;-) ..... genial, ich darf einfach kein Treffen mehr verpassen.

Gruss Christian\n\n

<!--EDIT|pug|1136551552-->
Ein Betriebssystem sie zu knechten, sie alle zu finden, Ins Dunkel zu treiben und ewig zu binden.

William Gates III
<< >> 10 Einträge, 1 Seite



View all threads created 2005-12-23 14:10.