2016-09-08 166 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="#" /> 
      

      對不起我的蹩腳英語