2016-09-08 2 views
0

Ma solutionPDO - Requête exécutée deux fois?

je débogage mes fonctions sur index.php, je ne l'ai pas remarqué que mon navigateur cherchait favicon.icon. Actuellement, mon routeur envoie l'utilisateur à index.php si le fichier demandé n'est pas trouvé, ce qui provoque le déclenchement seccond.

Vous pouvez facilement trouver ce @ vous êtes des journaux d'accès au site!

* Désolé pour mon Grammer, je l'espère, son lisible ..

Sujet

J'ai créé un petit script de base de données, il n'y a qu'une seule chose que je ne peux pas résoudre. Quand j'exécute une requête d'insertion, elle s'exécute deux fois. Les valeurs sont différentes (Value = 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(); 
} 

appel Fonction:

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

(Query envoyer à __init)

Pouvez-vous les gars me donner une idée est où chercher? Je cherche environ 4 heures maintenant.

Backtrace avant l'exécution

de base \ Database \ Handler -> __ init (INSERT INTO Serials (SerialKey, Active, ActivatedOn, ValidTo, Paid) VALUES (: série, 'non', NULL, NULL, ' no ') ;, Array ([Serial] => n R)) appelé à [PATH_TO_PUBLIC_HTMLpublic_html/Core/Base de données/Handler.php: 45] de base \ Database \ Händler-> requête (INSERT INTO Serials (SerialKey, Active, ActivatedOn, ValidTo, Paid) VALUES (: série, 'non', NULL, NULL, « n o ') ;, Array ([Serial] => n R)) appelé à [PATH_TO_PUBLIC_HTMLpublic_html/Core/SerialManager/createSerial.php: 17] core \ SerialManager \ createSerial -> __ storeToDB() appelée à [ PATH_TO_PUBLIC_HTMLpublic_html/Core/SerialManager/createSerial.php: 9] de base \ SerialManager \ createSerial -> __ construct() appelée à [PATH_TO_PUBLIC_HTMLpublic_html/Contrôleurs/Website.php: 6] site-> Accueil() call_user_func_array (Array ([0 ] => site Web Object(), [1] => Accueil), Array()) appelé à [PATH_TO_PUBLIC_HTMLpublic_html/Core/routage/router.php: 20] de base \ Routing \ Router -> __ construct() appelée à [PATH_TO_PUBLIC_HTMLpublic_html /index.php:3]

Backtrace après exécution

de base \ Database \ Handler -> __ init (INSERT INTO Serials (SerialKey, Active, ActivatedOn, ValidTo, Paid) VALUES (: série, 'non', NULL, NULL, 'non') ;, Array ([Série] => F 7 , .Kr)) appelé à [PATH_TO_PUBLIC_HTMLpublic_html/Core/Database/Handler.php: 45] Core \ Database \ Handler-> Requête (INSERT INTO Serials (SerialKey, Active, ActivatedOn, ValidTo, Paid) VALUES (: série, 'non', NULL, NULL, 'non') ;, Array ([série] => F7, .kr)) appelé à [PATH_TO_PUBLIC_HTMLpublic_html/Core/SerialManager/createSerial .php: 17] Core \ serialManager \ createSerial -> __ storeToDB() appelé à [PATH_TO_PUBLIC_HTMLpublic_html/Core/serialManager/createSerial.php: 9] Core \ serialManager \ createSerial -> __ construct() appelé à [PATH_TO_PUBLIC_HTMLpublic_html/Controllers/Website. php: 6] Website-> Home() call_user_func_array (Array ([0] => Site Web Object(), [1] => Accueil), Array()) appelé à [PATH_TO_PUBLIC_HTMLpublic_html/Core/Routing/Router.php : 20] de base \ Routing \ Router -> __ construct() appelée à [PATH_TO_PUBLIC_HTMLpublic_html/index.php: 3]

[NOTE] Ma société d'hébergement sont attaqués ..

* Désolé pour mon Grammer, a fait de mon mieux ..

+0

code validé @ autre serveur; le code fonctionne à 100%? Un ddos ​​/ attaque peut-il causer ce problème? –

+0

Un DDOS peut exposer des conditions de course que vous ne saviez pas avoir. Il ne crée pas de bugs, il les expose. Si vous voulez bloquer les doublons, mettez en place un index 'UNIQUE' pour les empêcher, ou ayez une sorte de [système d'idempotence] (https://en.wikipedia.org/wiki/Idempotence) en place pour vous assurer que le second appel n'est pas pas déclenché. – tadman

+0

Est-ce que db obtient l'entrée deux fois? ou vous le dites en regardant simplement des traces? – siddhesh

Répondre

2

cause du problème

Mon navigateur cherchait favicon.ico, mais il na pas exister. Si un fichier na pas/la page existe la demande est acheminée vers index.php

Erreur

  • Debugging sur index.php
  • manquant favicon.ico

Qu'est-ce que je appris?

  • Ne déboguez jamais sur la page d'accueil, voir ci-dessous pourquoi.
  • S'il y a 2 demandes sont incomming (quand 1 fait) Probablement le navigateur envoie la deuxième demande de chercher le favicon.ico (Dans mon cas, si la page doenst existe retour à l'accueil)

Solution

ne pas débogguer vous êtes index.php

Ajouter le code suivant vous pour êtes html

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

Désolé pour mon Broken English