2017-10-11 11 views
-2

Je viens migré de MySQL vers une nouvelle MariaDB et tous mes sites sont projetés:solution différente de `ne peut pas exécuter des requêtes alors que d'autres requêtes non tamponnée active`

Impossible d'exécuter des requêtes alors que d'autres requêtes unbuffered sont actives . Envisagez d'utiliser PDOStatement :: fetchAll(). Alternativement, si votre code ne sera exécuté que sur MySQL, vous pouvez activer la mise en mémoire tampon de la requête en définissant l'attribut PDO :: MYSQL_ATTR_USE_BUFFERED_QUERY.

J'ai recherché cette erreur et essayé de faire ce que les gens ont suggéré.

J'ai donc changé mon code pour utiliser le closeCursor() du PDO. J'ai essayé d'utiliser PDO::MYSQL_ATTR_USE_BUFFERED_QUERY et rien ne fonctionne.

Répondre

0

Et voici comment mon constructeur avait l'air:

$pdo = new PDO('mysql:host=' . $host . ';dbname=' . $db . ';port=' . $port, $user, $pass, 
       array(
        PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES utf8;SET SESSION time_zone="system"', 
        PDO::MYSQL_ATTR_LOCAL_INFILE => true 
       )); 

je l'ai changé

$pdo = new PDO('mysql:host=' . $host . ';dbname=' . $db . ';port=' . $port, $user, $pass, 
       array(
        PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES utf8, SESSION time_zone="system"',  
        PDO::MYSQL_ATTR_LOCAL_INFILE => true 
       )); 

et il ne fonctionne maintenant.

Je poste ma solution ici parce que tous les autres endroits ont de "mauvais".

Donc, la différence est au lieu d'avoir

'SET NAMES utf8;SET SESSION time_zone="system"' 

dans PDO::MYSQL_ATTR_INIT_COMMAND Je:

'SET NAMES utf8, SESSION time_zone="system"' 

et tout va bien maintenant.

+2

En fait, vous devriez mettre utf8 dans la section charset de DSN. et il est inutile d'utiliser PDO :: MYSQL_ATTR_INIT_COMMAND, car vous pouvez envoyer n'importe quel nombre de commandes en utilisant simplement la méthode query() –

+0

@YourCommonSense Avant PHP 5.3.6 le jeu de caractères dans DSN a été ignoré, donc la solution ci-dessus fonctionne même pour PHP plus ancien. Et en utilisant MYSQL_ATTR_INIT_COMMAND au lieu de query() est juste mon choix. – Tom