Thread Hexadezimale Werte mit DBI und Prepare in MySQL-Datenbank speichern (4 answers)
Opened by Pascal at 2010-10-25 15:14

Gast Pascal
 2010-10-25 15:14
#142165 #142165
Hallo!

Ich entwickle gerade ein Perl-Skript, das IPv6-Adressen in eine MySQL-Datenbank importiert. Da MySQL jedoch keinen 128bit-Integer bereitstellt, muss ich diese in einem VARBINARY-Feld speichern.
Für den Zugriff auf die Datenbank verwende ich das DBI-Modul. Führe ich das entsprechende INSERT-Statement (siehe Beispiel) direkt aus, funktioniert es ohne Probleme:

Code (perl): (dl )
1
2
3
my $sth = $dbh->do("INSERT INTO `accounting` (`IPv6_string`, `IPv6_binary`)
          VALUES ('fd01:0000:0000:0000:0000:0000:0000:0003',
          0xfd010000000000000000000000000003);");

Da das Statement mehrfach mit unterschiedlichen Werten ausgeführt werden soll, ist es natürlich sinnvoll, die Prepare-Funktionalität zu nutzen. Dies habe ich folgendermaßen versucht:

Code (perl): (dl )
1
2
3
4
5
my $sth = $dbh->prepare("INSERT INTO `accounting` (`IPv6_string`, `IPv6_binary`)
          VALUES (?, ?);");
$sth->bind_param(1, 'fd01:0000:0000:0000:0000:0000:0000:0003');
$sth->bind_param(2, '0xfd010000000000000000000000000003', SQL_VARBINARY);
$sth->execute();

Leider wird hierbei der Binärwert des Hex-Strings und nicht der Wert, den der Hex-String darstellt, in der Datenbank gespeichert.

Hatt vielleicht jemand eine Idee, wie es trotzdem möglich ist, Statement-Preparation zu verwenden?


MfG

Pascal
Last edited: 2010-10-25 15:17:06 +0200 (CEST)

View full thread Hexadezimale Werte mit DBI und Prepare in MySQL-Datenbank speichern