Lançado Adianti Framework 7.6!
Clique aqui para saber mais
Erro abir uma transação utilizando o MySQL Estou tendo problemas ao utilizar o MySQL, o problema ocorre ao tentar abrir uma conexão "TTransaction::open('banco'); ", o framework retorna um erro, gostaria de saber como solucionar o problema. Segue os detalhes Configuração da conexão return [ 'host' => "127.0.0.1", 'port' => "3306", 'name' => "banco", 'user' => "root", 'pass' ...
JJ
Erro abir uma transação utilizando o MySQL  
Estou tendo problemas ao utilizar o MySQL, o problema ocorre ao tentar abrir uma conexão "TTransaction::open('banco'); ", o framework retorna um erro, gostaria de saber como solucionar o problema.

Segue os detalhes


Configuração da conexão


return [ 'host' => "127.0.0.1", 'port' => "3306", 'name' => "banco", 'user' => "root", 'pass' => "", 'type' => "mysql", 'prep' => "1", 'zone' => "America/Sao_Paulo", 'char' => "utf8mb4" ];


Exception


SQLSTATE[HY000]: General error: 2014 Cannot execute queries while other unbuffered queries are active. Consider using PDOStatement::fetchAll(). Alternatively, if your code is only ever going to run against mysql, you may enable query buffering by setting the PDO::MYSQL_ATTR_USE_BUFFERED_QUERY attribute.

A documentação do PHP sugere a inclusão de um atributo na conexão



https://www.php.net/manual/en/ref.pdo-mysql.php
  1. <?php
  2. $pdo = new PDO("mysql:host=localhost;dbname=world"'my_user''my_password');
  3. $pdo->setAttribute(PDO::MYSQL_ATTR_USE_BUFFERED_QUERYfalse);
  4. $unbufferedResult $pdo->query("SELECT Name FROM City");
  5. foreach ($unbufferedResult as $row) {
  6.     echo $row['Name'] . PHP_EOL;
  7. }
  8. ?>



Fiz a modificação na classe TConnection porém ainda continua retornando o mesmo erro.
Editado 30/08/2023 (há 8 meses) - Clique para ver alterações

Curso completo Meu Negócio Pronto
Use para si, ou transforme em um negócio: Inclui aulas e códigos-fontes
Gestor de conteúdo (SITE) + Loja Virtual (E-Commerce) + Emissor de Notas para infoprodutos


Meu negócio pronto Quero me inscrever agora!

Comentários (2)


PS

Pior que eu tbm estou tendo o mesmo problema aqui... inclusive o pablo respondeu meu help no face, mas o meu problema ainda não foi solucionado
JJ

Eu resolvi de duas formas diferentes



1º Removendo o zone do arquivo de configuração com o banco (note que está apenas comentado)


Exemplo



app/config/conexaoDoMeuBanco.php

return [ 'host' => "127.0.0.1", 'port' => "3306", 'name' => "banco", 'user' => "root", 'pass' => "", 'type' => "mysql", 'prep' => "1", //'zone' => "America/Sao_Paulo", 'char' => "utf8mb4" ];


2º Alterando a classe TConnection (lib/adianti/database/TConnection.php)



SUBSTITUINDO A LINHA 107

$conn = new PDO("mysql:host={$host};port={$port};dbname={$name}{$opts}", $user, $pass, array(PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES utf8mb4{$zone}"));


POR

$conn = new PDO("mysql:host={$host};port={$port};dbname={$name}{$opts}", $user, $pass, array(PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_BOTH));



Como não é indicado alterar o core do framework eu estou utilizando a primeira forma.

Editado 05/09/2023 (há 7 meses) - Ver alterações