2016-09-08 129 views
0

我的解决方案PDO - 查询执行两次?

我在调试的index.php我的职务,我没有注意到,我的浏览器是寻找favicon.icon。目前,如果找不到请求的文件,我的路由器会将用户发送到index.php,这会导致第二个触发器。

您可以轻松地找到这个@你是站点访问日志!

*对不起,我的语法,我希望它的可读性..

主题

我创建了一个小数据库脚本,就只有一件事我解决不了。当我执行插入查询时,它将执行两次。值是不同的(值= openssl_random_pseudo_bytes)。

private function __init($Query = '', $Params = NULL){ 
    if($this->__getStatus() === false){ 
     $this->__createConnection(); 
    } 
    $this->__PQuery = $this->__Database->prepare($Query); 
     foreach($Params as $param => $value){ 
      $dataType = PDO::PARAM_STR; 
      switch ($value){ 
       case is_int($value): 
        $dataType = PDO::PARAM_INT; 
       break; 
       case is_bool($value): 
        $dataType = PDO::PARAM_BOOL; 
       break; 
       case is_null($value): 
        $dataType = PDO::PARAM_NULL; 
       break; 
     } 
    $this->__PQuery->bindValue($param, $value, $dataType); 
    } 
    $this->__PQuery->execute(); 
} 

函数调用:

$this->__database->Query("INSERT INTO `Serials` (`SerialKey`, `Active`, `ActivatedOn`, `ValidTo`, `Paid`) VALUES (:Serial, 'no', NULL, NULL, 'no');", ['Serial' => openssl_random_pseudo_bytes(10)]); 

(查询发送到__init)

你们能不能给我任何的想法是在哪里看?我正在寻找大约4个小时。

回溯之前执行

核心\数据库\处理程序 - > __初始化(INSERT INTO SerialsSerialKeyActiveActivatedOnValidToPaid)VALUES(:串行, '否',NULL,NULL,' )在[PATH_TO_PUBLIC_HTMLpublic_html/Core/Database/Handler.php:45] Core \ Database \ Handler-> Query(INSERT INTO Serials(no)),Array([Serial] => n R) SerialKey,Active,ActivatedOn,ValidTo,Paid)VALUES(:Serial,'no',NULL,NULL,'n )在[PATH_TO_PUBLIC_HTMLpublic_html/Core/serialManager/createSerial.php:17]调用的Core \ serialManager \ createSerial - > __ storeToDB()调用的数组([Serial] => n R) ()[0] [0] [0]回复此主题返回主题列表(0)相关内容查看和编辑器相关的微博。分享到:QQ空间新浪微博腾讯微博人人网腾讯微博百度相册更多...百度分享首页在[PATH_TO_PUBLIC_HTMLpublic_html/Core/Routing/Router.php:20]调用Core \ Routing \ Router - > __ construct()时调用的网站对象(),[1] => Home),数组() /index.php:3]

执行后回溯

核心\数据库\处理程序 - > __初始化(INSERT INTO SerialsSerialKeyActiveActivatedOnValidToPaid)VALUES(:串行, '否',NULL,NULL, '否');,阵列( [串行] => F7,.Kr))称为在[PATH_TO_PUBLIC_HTMLpublic_html /核心/数据库/ Handler.php:45] 核心\数据库\ Handler->查询(INSERT INTO SerialsSerialKeyActiveActivatedOn,在[PATH_TO_PUBLIC_HTMLpublic_html/Core/serialManager/createSerial())中调用的值((Serial,'no',NULL,NULL,'no'),Array([Serial] =>F 7 ,.Kr ) 。在[PATH_TO_PUBLIC_HTMLpublic_html/Controllers/Website上调用Core \ serialManager \ createSerial - > __ construct()时调用了Core \ serialManager \ createSerial - > __ storeToDB()[0124]在[PATH_TO_PUBLIC_HTMLpublic_html/Core/Routing/Router.php]中调用call_user_func_array(Array [[0] => Website Object(),[1] => Home),Array())。 :20] 核心\路由\路由器 - > __结构()呼吁在[PATH_TO_PUBLIC_HTMLpublic_html/index.php文件:3]

[注]我的托管公司都受到了攻击..

*对不起,我的语法,做了我最好的..

+0

代码验证@其他服务器;代码是100%的工作? ddos /攻击可以导致这个问题吗? –

+0

DDOS可以暴露您不知道您拥有的竞争条件。它不会创建错误,它会暴露它们。如果你想阻止重复,可以设置一个'UNIQUE'索引来阻止它们,或者有一些[幂等系统](https://en.wikipedia.org/wiki/Idempotence)来确保第二个调用isn没有触发。 – tadman

+0

是db获取两次?或者只是通过观察痕迹来表达它? – siddhesh

回答

2

导致问题

我的浏览器一直在寻找的favicon.ico的,但它没有存在。如果一个文件/页面didnt存在请求路由到index.php上的index.php

  • 缺少的favicon.ico
  • 我怎么

    错误

    • 调试学到了?

      • 千万不要在主页上调试,看下面为什么。
      • 如果有2个请求进来的(当1发)大概浏览器发送来寻找favicon.ico的第二请求(在我的情况下,如果页面doenst存在返回首页)

      解决方案

      不要调试上你的index.php

      添加以下代码到你的HTML

      <link rel="shortcut icon" href="#" /> 
      

      对不起我的蹩脚英语