Danke, stimmt mit der IP. Das andere schaue ich mir noch an.
Neuer Eintrag in der Datenbank, Duplikat soll vorhanden Eintrag ersetzen
Einklappen
X
-
Zitat von sharbich Beitrag anzeigenWobei ich noch unter DUPLICATE KEY UPDATE die `ip` mit aufgenommen habe
Und dann solltest du noch addslashes durch dies ersetzen: https://www.php.net/manual/de/mysqli...ape-string.phpZuletzt geändert von scatello; 08.01.2024, 15:37.
Einen Kommentar schreiben:
-
Lieber scatello,
ein Dankeschön. Das war es. Wobei ich noch unter DUPLICATE KEY UPDATE die `ip` mit aufgenommen habe. Der Vollständigkeitshalber:
PHP-Code:$query = "INSERT INTO
`".$tablename."`
(`hostname`,
`created`,
`name`,
`protocol`,
`port`,
`ip`)
VALUES
('".addslashes($hostname)."',
NOW(),
'".addslashes($name)."',
'".addslashes($protocol)."',
'".addslashes($port)."',
'".addslashes($ip)."')
ON DUPLICATE KEY UPDATE
`hostname` = '$hostname',
`created` = NOW(),
`name` = '$name',
`protocol` = '$protocol',
`port` = '$port',
`ip` = '$ip'";
Einen Kommentar schreiben:
-
Code:INSERT INTO `fail2ban` (`hostname`, `created`, `name`, `protocol`, `port`, `ip`) VALUES ('dsme01', NOW(), 'jailname', 'http', '80', '200.200.2.2') ON DUPLICATE KEY UPDATE `hostname` = 'dsme01', `created`=now(), `name` = 'jailname', `protocol` = 'http', `port` = '80'
Zuletzt geändert von scatello; 08.01.2024, 13:11.
Einen Kommentar schreiben:
-
Hallo scatello,
ich bin leider kein Entwickler der Code fest ist. Ich muss die Flügel streichen. mit dem unteren Code funktioniert es nicht es kommt eine Fehlermeldung.
Dieser Code funktioniert. Es wird ein neuer Eintrag angelegt:
PHP-Code:$query = "INSERT INTO
`".$tablename."`
(`hostname`,
`created`,
`name`,
`protocol`,
`port`,
`ip`)
VALUES
('".addslashes($hostname)."',
NOW(),
'".addslashes($name)."',
'".addslashes($protocol)."',
'".addslashes($port)."',
'".addslashes($ip)."')";
PHP-Code:$query = "INSERT INTO
`".$tablename."`
VALUES
('".addslashes($hostname)."',
NOW(),
'".addslashes($name)."',
'".addslashes($protocol)."',
'".addslashes($port)."',
'".addslashes($ip)."')
ON DUBLICATE KEY UPDATE
hostname = '$hostname',
name = '$name',
protocol = '$protocol',
port = '$port',
ip = '$ip'";
HTML-Code:root@dsme01:/etc/fail2ban# ./fail2ban.php jailname http 80 123.123.123.124 #!/usr/bin/php Error: INSERT INTO `fail2ban` VALUES ('dsme01', NOW(), 'jailname', 'http', '80', '123.123.123.124') ON DUBLICATE KEY UPDATE hostname = 'dsme01', name = 'jailname', protocol = 'http', port = '80', ip = '123.123.123.124'<br>You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near 'DUBLICATE KEY UPDATE hostname = 'dsme01', name = ...' at line 10root@dsme01:/etc/fail2ban#
Einen Kommentar schreiben:
-
Hallo scatello,
ich weiß ich muss das Problem selbst lösen. Wenn ich auf die Beispiele schaue dann wird immer der Werd id mit angegeben. Dieser wird aber in meiner Tabelle automatisch generiert, wenn ein neuer Eintrag erstellt wird. Ich beginne ja mit einem neuen Eintrag, weil meine Datenbank leer ist. Es sind ja noch keine Werte in der Datenbank und trotzdem schlägt der qurey fehl.
Einen Kommentar schreiben:
-
Hier findest du eine gute Beschreibung: https://mariadb.com/kb/en/insert-on-...te-key-update/
Achte auf die Beispiele, dann sollte dir klar werden, wo dein Problem liegt.
Einen Kommentar schreiben:
-
Hallo scatello,
ich habe jetzt die id und ip rausgenommen. Leider schlägt die Abfrage immer noch mit Fehler auf:
HTML-Code:root@dsme01:/etc/fail2ban# ./fail2ban.php jailname http 80 123.123.123.124 #!/usr/bin/php Error: INSERT INTO `fail2ban` (`hostname`, `created`, `name`, `protocol`, `port`, `ip`) VALUES ('dsme01', NOW(),'jailname', 'http', '80', '123.123.123.124' ) ON DUBLICATE KEY UPDATE `hostname` = :dsme01, `name` = :jailname, `protocol` = :http, `port` = :80<br>You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near 'DUBLICATE KEY UPDATE `hostname` = :dsme01,
https://medium.com/terales-engineeri...t-410ee63b4463Zuletzt geändert von sharbich; 08.01.2024, 09:59.
Einen Kommentar schreiben:
-
Zuerst einmal ein Hinweis:
Wenn man das so schreibt:
PHP-Code:$query = "INSERT INTO
`$tablename`
(`hostname`,
`created`,
`name`,
`protocol`,
`port`,
`ip`)
VALUES
('" . addslashes($hostname) . "',
NOW(),'" .
addslashes($name) . "',
'" . addslashes($protocol) . "',
'" . addslashes($port) . "',
'" . addslashes($ip) . "'
)
ON DUBLICATE KEY
UPDATE
`id` = LAST_INSERT_ID(`id`),
`hostname` = :$hostname,
`name` = :$name,
`protocol` = :$protocol,
`port` = :$port,
`ip` = :$ip";
Dann:
Wieso willst du die ID updaten? Das ist doch Quatsch.
Wenn ich addslashes sehe, gehe ich davon aus, dass du keine Prepare Statements benutzt, also sind :$hostname, :$name, :$protocol, :$port und :$ip die falsche schreibweise.
Außerdem ist es auch nicht erforderlich, die IP zu aktualisieren, denn die ist ja sowieso die gleiche.
Einen Kommentar schreiben:
-
Zitat von scatello Beitrag anzeigenAlso doch eine Spalte mit eindeutigen Werten. Wenn du die Spalte auf Unique setzt, dann sollte der Ansatz mit Duplicate Key funktionieren.
PHP-Code:$query = "INSERT INTO `".$tablename."`(`hostname`, `created`, `name`, `protocol`, `port`, `ip`) VALUES ('".addslashes($hostname)."',NOW(),'".addslashes($name)."','".addslashes($protocol)."','".addslashes($port)."','".addslashes($ip)."') ON DUBLICATE KEY UPDATE `id` = LAST_INSERT_ID(`id`), `hostname` = :$hostname, `name` = :$name, `protocol` = :$protocol, `port` = :$port, `ip` = :$ip";
HTML-Code:root@dsme01:/etc/fail2ban# ./fail2ban.php jailname http 80 123.123.123.124 #!/usr/bin/php Error: INSERT INTO `fail2ban`(`hostname`, `created`, `name`, `protocol`, `port`, `ip`) VALUES ('dsme01',NOW(),'jailname','http','80','123.123.123.124') ON DUBLICATE KEY UPDATE `id` = LAST_INSERT_ID(`id`), `hostname` = :dsme01, `name` = :jailname, `protocol` = :http, `port` = :80, `ip` = :123.123.123.124<br>You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near 'DUBLnano fail2ban.phphostname` = :dsme01, `name...' at line 1
1 Bild
Einen Kommentar schreiben:
-
PHP-Code:$query = "Update `".$tablename."` (`created`) values(now()) where 'id'=" . $data['id'];
Das IP Adresse Feld 'ip' muss eindeutig sein.Zuletzt geändert von scatello; 06.01.2024, 18:40.
Einen Kommentar schreiben:
-
Hallo scatello,
Du hast Recht. Es geht wohl nur mit Deinem Code. Allerdings bekomme ich das nicht hin. Hier nochmals meine Tabelle:
HTML-Code:MariaDB [(none)]> use fail2ban; Reading table information for completion of table and column names You can turn off this feature to get a quicker startup with -A Database changed MariaDB [fail2ban]> show columns from fail2ban; +----------+---------------------+------+-----+---------+----------------+ | Field | Type | Null | Key | Default | Extra | +----------+---------------------+------+-----+---------+----------------+ | id | bigint(20) unsigned | NO | PRI | NULL | auto_increment | | hostname | varchar(255) | YES | MUL | NULL | | | created | datetime | NO | | NULL | | | name | text | NO | | NULL | | | protocol | varchar(16) | NO | | NULL | | | port | varchar(32) | NO | | NULL | | | ip | varchar(64) | NO | | NULL | | +----------+---------------------+------+-----+---------+----------------+ 7 rows in set (0,001 sec)
PHP-Code:$query = "select `id`, `hostname`, `name`, `protocol`, `port`, `ip` from `".$tablename."` where `hostname`='$hostname' and `name`='$name' and `protocol`='$protocol' and `port`='$port' and `ip`='$ip'";
$result = mysqli_query($link, $query)
or die("MySQL-Error: " . mysqli_error($link));
$rowcount = mysqli_num_rows($result);
if ($rowcount)
{
$data = mysqli_fetch_assoc($result);
$query = "Update `".$tablename."` (`created`) values(now()) where 'id'=" . $data['id'];
$result = mysqli_query($link, $query)
or die("MySQL-Error: " . mysqli_error($link));
}
else
{
$query = "INSERT INTO `".$tablename."`(`hostname`, `created`, `name`, `protocol`, `port`, `ip`) VALUES ('".addslashes($hostname)."',NOW(),'".addslashes($name)."','".addslashes($protocol)."','".addslashes($port)."','".addslashes($ip)."')";
$result = mysqli_query($link, $query)
or die("MySQL-Error: " . mysqli_error($link));
}
Es werden auch zwei Datensätze angelegt und es kommt folgende Fehlermeldung:
HTML-Code:root@dsme01:/etc/fail2ban# ./fail2ban.php jailname http 80 123.123.123.124 #!/usr/bin/php MySQL-Error: You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near '(`created`) values(now()) where 'id'=7' at line 1root@dsme01:/etc/fail2ban# ./fail2ban.php jailname http 80 123.123.123.124 #!/usr/bin/php Ip to BAN added to DATABASEroot@dsme01:/etc/fail2ban#
Zuletzt geändert von sharbich; 06.01.2024, 13:49.
Einen Kommentar schreiben:
-
Zitat von sharbich Beitrag anzeigenDas habe ich im Netz gefunden.
Einen Kommentar schreiben:
-
Guten Morgen,
es scheint aber auch anders zu gehen. Das habe ich im Netz gefunden.
https://stackoverflow.com/questions/...last-insert-id
Einen Kommentar schreiben:
-
Zitat von sharbich Beitrag anzeigenWarum geht dann "ON DUBLICATE KEY UPDATE" nicht?
Einen Kommentar schreiben:
Einen Kommentar schreiben: