我想在检测到attack
时将某些内容记录到数据库中。类定义和抛出是分开的,但为了简单起见,它们在这里加入了它们。我在考虑:
<?php
class Attack extends Exception {
public function __construct($message, $code = 0, Exception $previous = null, $DB, $IP) {
$STH = $DB->prepare("INSERT INTO blocked (`type`, `value`) VALUES ('ip', ?)");
$STH->execute(array($IP));
parent::__construct($message, $code, $previous);
}
}
// code
if (!empty($_POST['honeypot']))
throw new Attack($IP . " submitted a filled in honeypot", 0, null, $DB, $IP);
但我也可以考虑这个更简单但更严格的方法:
<?php
class Attack extends Exception {
public function __construct($message, PDO $DB, $IP) {
$STH = $DB->prepare("INSERT INTO blocked (`type`, `value`) VALUES ('ip', ?)");
$STH->execute(array($IP));
parent::__construct($message);
}
}
// code
if (!empty($_POST['honeypot']))
throw new Attack($IP . " submitted a filled in honeypot", $DB, $IP);
我甚至不确定这是否有效,但也有:
<?php
class Attack extends Exception {
public function __construct($message, $code = 0, Exception $previous = null) {
parent::__construct($message, $code, $previous);
}
public function block ($DB, $IP) {
$STH = $DB->prepare("INSERT INTO blocked (`type`, `value`) VALUES ('ip', ?)");
$STH->execute(array($IP));
}
}
// code
if (!empty($_POST['honeypot'])) {
$e = new Attack($IP . " submitted a filled in honeypot");
$e->block($DB, $IP);
throw $e;
}
我只想在检测到攻击时将IP(可能还有其他一些数据)保存到数据库中。每种方法有哪些优缺点?你能想到其他任何方法吗?
在抛出异常时将某些内容记录到数据库中最常用的方法是什么?
答案 0 :(得分:0)
这里不需要例外。
如果用户到达目的地,那绝不是特例,而是非常规的情况。因此,只需处理此请求,就像处理任何其他用户操作一样,没有例外。