PDO MySQL -> «SQLSTATE [HY000]: общая ошибка: 2014: невозможно выполнить запросы, когда другие небуферизованные запросы активны».на простой запрос вставки - PullRequest
0 голосов
/ 08 марта 2019

Я сталкиваюсь с этой ошибкой, когда мой код, похоже, не имеет ничего общего с основной причиной ошибки. Я только пытаюсь вставить часть данных в базу данных, используя традиционный метод и подход. Но для этого случая эта ошибка появляется из ниоткуда и блокирует мою машину. Я перепробовал большинство решений, которые нашел в Интернете, но безуспешно. Вот мой код.

<?php
namespace App\Util;

require_once 'config.php';

class Connection {
    private static $connection;

    public static function getConnection(){
        if (self::$connection == null) {
            try {
                self::$connection = new \PDO("mysql:host=".HOST.";dbname=".DBNAME.";port=".PORT.";charset=utf8", USER, PASSWORD);
            } catch (Exception $ex) {
                die('Connexion échouée '. $ex->getMessage());
            }  
        }

        return self::$connection;
    }
}
?>

<?php
namespace App\Dao;

use App\Util\Connection;

class Dao {
    protected $connection;
    protected $requete;
    function __construct() {
        $this->connection = Connection::getConnection();
        $this->connection->setAttribute(\PDO::ATTR_ERRMODE, \PDO::ERRMODE_EXCEPTION);
        $this->connection->setAttribute(\PDO::ATTR_EMULATE_PREPARES, TRUE);
    }
}
?>

<?php

namespace App\Dao;

use App\Dao\Dao;
use App\Dao\DaoPeriode;

class DaoDeclaration extends Dao{

    public function addFromArray($declaration){

        $extensionId = $declaration["extension"]["extensionId"];
        $periode = $declaration["periode"];
        //$lignes = $declaration["lignes"];
        $userId = $declaration["user"]["userId"];

        $daoP = new DaoPeriode();
        $periodeDec = $daoP->getPeriode2($periode["mois"], $periode["annee"]);
        $periodeId = $periodeDec->getPeriodeId();

        $format = 'Y-m-d H:i:s';

        $time = \DateTime::createFromFormat($format, str_replace("T", " ", $declaration["dateDeclaration"]), null) ;
        $date = $time->format($format); 

        try {

            $this->requete = $this->connection->prepare("call add_declaration(:v_extension_id, :v_periode_id, :v_user_id, :v_date_declaration)");
            //$this->requete = $this->connection->prepare($sql);
            $this->requete->bindValue(':v_extension_id', (int)$extensionId, \PDO::PARAM_INT);
            $this->requete->bindValue(':v_periode_id', (int)$periodeId, \PDO::PARAM_INT);
            $this->requete->bindValue(':v_user_id', (int)$userId, \PDO::PARAM_INT);
            $this->requete->bindValue(':v_date_declaration', $date);

            $this->requete->execute();

            $data = $this->requete->fetchAll(\PDO::FETCH_ASSOC);

            $id = count($data) > 0 ? $data[0]["id"] : 0;

            $this->requete->closeCursor();

        } catch (\PDOException $e) {
            echo $e->getMessage();
        }
    }
?>

При вызове метода daoDeclaration addFromArray я получаю сообщение об ошибке выше.

<?php
require_once __DIR__.'/../vendor/autoload.php';

use App\Dao\DaoDeclaration;

    $declaration = json_decode($declarationFromJson, true);
    $dao = new DaoDeclaration();
    $feed = $dao->addFromArray($declaration);

    //echo json_encode($feed > 0 ? 1 : 0);

    }

Может кто-нибудь помочь мне, пожалуйста?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...