【问题标题】:PDO - Query executed twice?PDO - 查询执行了两次?
【发布时间】:2016-09-08 17:30:58
【问题描述】:

我的解决方案

我在 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个小时。

执行前的回溯

Core\Database\Handler->__init(INSERT INTO Serials (SerialKey, Active, ActivatedOn, ValidTo, Paid) VALUES (:Serial, 'no', NULL, NULL , 'no');, Array ([Serial] => ��n�� �R)) 在 [PATH_TO_PUBLIC_HTMLpublic_html/Core/Database/Handler.php:45] 调用 Core\Database\Handler->Query(INSERT INTO Serials (SerialKey, Active, ActivatedOn, ValidTo, Paid) VALUES (:Serial, 'no', NULL, NULL, 'no ');, 数组 ([Serial] => ��n�� �R)) 在 [PATH_TO_PUBLIC_HTMLpublic_html/Core/serialManager/createSerial.php:17] 调用 Core\serialManager\createSerial->__storeToDB() 在 [PATH_TO_PUBLIC_HTMLpublic_html/Core/serialManager/createSerial.php:9] 调用 Core\serialManager\createSerial->__construct() 在 [PATH_TO_PUBLIC_HTMLpublic_html/Controllers/Website.php:6] 调用 网站->首页() call_user_func_array(Array ([0] => Website Object (),[1] => Home), Array ()) 在 [PATH_TO_PUBLIC_HTMLpublic_html/Core/Routing/Router.php:20] 调用 Core\Routing\Router->__construct() 在 [PATH_TO_PUBLIC_HTMLpublic_html/index.php:3] 调用

执行后的回溯

Core\Database\Handler->__init(INSERT INTO Serials (SerialKey, Active, ActivatedOn, ValidTo, Paid) VALUES (:Serial, 'no', NULL, NULL , 'no');, Array ([Serial] => F�7�,.Kr�)) 在 [PATH_TO_PUBLIC_HTMLpublic_html/Core/Database/Handler.php:45] 调用 Core\Database\Handler->Query(INSERT INTO Serials (SerialKey, Active, ActivatedOn, ValidTo, Paid) VALUES (:Serial, 'no', NULL, NULL, 'no ');, 在 [PATH_TO_PUBLIC_HTMLpublic_html/Core/serialManager/createSerial.php:17] 调用的数组 ([Serial] => F�7�,.Kr�)) Core\serialManager\createSerial->__storeToDB() 在 [PATH_TO_PUBLIC_HTMLpublic_html/Core/serialManager/createSerial.php:9] 调用 Core\serialManager\createSerial->__construct() 在 [PATH_TO_PUBLIC_HTMLpublic_html/Controllers/Website.php:6] 调用 网站->首页() call_user_func_array(Array ([0] => Website Object (),[1] => Home), Array ()) 在 [PATH_TO_PUBLIC_HTMLpublic_html/Core/Routing/Router.php:20] 调用 Core\Routing\Router->__construct() 在 [PATH_TO_PUBLIC_HTMLpublic_html/index.php:3] 调用

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

*对不起我的语法,我尽力了..

【问题讨论】:

  • 代码验证@其他服务器;代码 100% 工作? ddos/attack 会导致这个问题吗?
  • DDOS 可以暴露你不知道的竞争条件。它不会产生错误,它会暴露它们。如果您想阻止重复,请设置一个 UNIQUE 索引来阻止它们,或者设置某种 idempotency system 以确保不会触发第二次调用。
  • db 是否获得两次条目?还是你只看痕迹就知道了?
  • 您需要提供更多代码。可能是$this->__database->Query() 调用了它两次,或者调用了另一个函数第二次调用了__init()
  • @AbcAeffchen 为这个主题添加了我的解决方案! (知道晚了)

标签: php mysql


【解决方案1】:

问题原因

我的浏览器正在寻找 favicon.ico,但它不存在。如果文件/页面不存在,则请求被路由到 index.php

错误

  • 在 index.php 上调试
  • 缺少 favicon.ico

我学到了什么?

  • 永远不要在主页上调试,原因如下。
  • 如果有 2 个请求传入(当 1 个请求发出时),浏览器可能会发送第二个请求来查找 favicon.ico(在我的情况下,如果该页面不存在,则返回主页)

解决方案

1 不要在你的 index.php 上调试

2在你的html中加入如下代码

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

抱歉我的英语不好

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-06-09
    • 2012-12-29
    相关资源
    最近更新 更多