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 INTOSerials
(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 INTOSerials
(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 ..
code validé @ autre serveur; le code fonctionne à 100%? Un ddos / attaque peut-il causer ce problème? –
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
Est-ce que db obtient l'entrée deux fois? ou vous le dites en regardant simplement des traces? – siddhesh