Zitat:
Zitat von erselbst
Hmm, das funktioniert erstmal so. Muss denn Port vom Type SET sein? Dann kann ich nur vorgegebenen Ports eingeben. Es wäre schön, wenn man die Ports selbst eingeben kann (z.B. 8080). Dann wäre doch besser die Spalte Port vom Type INT(4) zu nehmen. Ist das richtig?
|
SET ist ein 64 -Bitmaskenfeld.
Zitat:
Grr, erst denken, dann posten. Das geht natürlich nicht, wäre ja dann nicht unique bzw könnte nur ein Port zu einer IP-Adresse eingegeben werden.
|
Natürlich wäre es möglich, zur Laufzeit die Spalte um weitere Ports zu erweitern.
Teste das einfach mal mit dem PMA (PHPmyAdmin). Der liefert dann auch gleich den SQL String.
Allerdings gibt es ein kleines Problem: die Reihenfolge der Bezeichner darfst Du nicht verändern:
1. Bit hat den Namen '80'
2. Bit hat den Namen '433'
3. Bit hat den Namen '8080'
MySQL trägt in die 8Byte große Spalte dann nur ne 1 oder ne 0 ein.
Und damit Du an die aktuelle Reihenfolge kommst, könntest Du einen Datensatz für die 0.0.0.0 => 0 anlegen, in dem Du alle verfügbaren Bits setzt.
Code:
INSERT INTO `test` (`ipaddr`, `port`) VALUES (0, '80,443');
Bei der Abfrage liefert MySQL nen kommaseparierten String aller gesetzten Bits.
Code:
SELECT port FROM test WHERE ipaddr = 0;
=> '80,443'
Nu soll Port 8080 dazu. In SQL sähe das so aus:
Code:
ALTER TABLE `test` CHANGE `port` `port` SET( '80', '443', '8080' ) NOT NULL DEFAULT '80';
Wie Du den ALTER TABLE String basteln könntest, kannste Dir da mal angucken:
http://mod.php.developer.vc/set-1/ (Quelltext wird angezeigt)