douyu4535 2013-12-26 23:23
浏览 34
已采纳

将数据库处理程序传递给异

I want to log something into the database when an attack is detected. The class definition and throwing go separated, but joined them here for simplicity. I was thinking about:

<?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);

But I can also think about this even simpler, though more rigid, method:

<?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);

And I'm not even sure if this works but there's also this:

<?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;
  }

I just want to save the IP (and maybe some other data) into the database when an attack is detected. What are the advantages and disadvantages of each method? Can you think of any other method?

Which method is the most commonly used when logging something into the database while throwing an exception?

  • 写回答

1条回答 默认 最新

  • douling1936 2013-12-27 05:27
    关注

    You don't need an exception here.

    If a user reached the destination, it is by no means an exceptional case but rather a pretty regular one. So, just process this request, like you do for any other user action, without exceptions.

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥15 msix packaging tool打包问题
  • ¥28 微信小程序开发页面布局没问题,真机调试的时候页面布局就乱了
  • ¥15 python的qt5界面
  • ¥15 无线电能传输系统MATLAB仿真问题
  • ¥50 如何用脚本实现输入法的热键设置
  • ¥20 我想使用一些网络协议或者部分协议也行,主要想实现类似于traceroute的一定步长内的路由拓扑功能
  • ¥30 深度学习,前后端连接
  • ¥15 孟德尔随机化结果不一致
  • ¥15 apm2.8飞控罗盘bad health,加速度计校准失败
  • ¥15 求解O-S方程的特征值问题给出边界层布拉休斯平行流的中性曲线