Thread Schreiben in der Datenbank (8 answers)
Opened by joelsok at 2010-07-20 10:57

topeg
 2010-07-20 11:41
#139967 #139967
User since
2006-07-10
2611 Artikel
BenutzerIn

user image
Baue keine solchen Statements, das ist gefährlich. was ist wenn in einer Variable SQL-Code drin steht, der die DB löschen soll? Das nennt man dann SQL-Injection und jeder sollte wissen wie man das umgeht.
Du kannst die Funktion auch allein aufrufen und später dem Statement hinzufügen.
Den Datenbanknamen als Variable zu übergeben ist auch nicht ungefährlich, wenn du nicht immer absolut Sicherstellen kannst, dass es der richtige Name ist. Wenn der beliebig austauschbar ist, dann kann man unter Umständen auch in ganz andere Tabellen schreiben.


So kann man das aber machen, denke ich:
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
# die zweitbeste Möglichkeit,
# leider nicht ganz sicher,
# man kann Statements bauen,
# die das Austricksen können.
my $q_table=quotemeta($table);

my $query_id="SELECT replace(newid(),'-','') FROM $q_table"
my $query_insert="INSERT INTO $q_table (Id, ProblemNumber, CreatedDateTime, CreatedBy) VALUES (?,?,?,?)";

# ID ermitteln
my $sth_id=$dbh->prepare($query_id);
$sth_id->execute();
my $id=$sth_id->fetchrow_arrayref()->[0];
$sth_id->finish();

# Daten hinzufügen
my $sth_insert=$dbh->prepare($query_insert);
$sth_insert->execute($id, $problemNumber, $createdDateTime, $createdBy);
$sth_insert->finish();

# Daten hinzufügen alternativ,
# wenn man das nur einmal braucht:
$dbh->do($query_insert, undef, $id, $problemNumber, $createdDateTime, $createdBy);


Leider kommen nicht alle Datenbanken damit klar auch den Tabellennamen auch Dynamisch zu übergeben. Darum setze ich es noch so. Du solltest ausprobieren ob das bei deiner funktioniert.

EDIT: Ergänzug
Last edited: 2010-07-20 11:43:51 +0200 (CEST)

View full thread Schreiben in der Datenbank