once - php net const




Constante de classe non définie 'MYSQL_ATTR_INIT_COMMAND' avec pdo (7)

$db = new PDO('mysql:dbname=xnews;host=localhost;port=' . $LOCAL_DB_PORT, 
          $LOCAL_DB_USER, 
          $LOCAL_DB_PASS, 
          array(PDO::MYSQL_ATTR_INIT_COMMAND =>  "SET NAMES 'UTF8'")
      );

rapports:

Constante de classe non définie 'MYSQL_ATTR_INIT_COMMAND'

Est-ce renommé?


Cela est dû à un bogue PHP 5.3.0 sous Windows où MYSQL_ATTR_INIT_COMMAND n'est pas disponible. Le rapport de bogue PHP est le suivant:

http://bugs.php.net/bug.php?id=47224

Si vous rencontrez ce problème, veuillez mettre à jour votre produit WAMP vers une version utilisant PHP 5.3.1 ou une version ultérieure.


Il semble être seulement disponible en utilisant le pilote mysqlnd .
Essayez de le remplacer par le nombre entier qu'il représente; 1002, si je ne me trompe pas.


J'ai eu la même erreur, sur debian6, quand je n'avais pas encore installé php5-mysql .

Je l'ai donc installé, puis redémarré apache2

apt-get install php5-mysql
/etc/init.d/apache2 restart

Puis l'erreur a disparu.

Si vous avez la même erreur sur Ubuntu, au lieu de:

/etc/init.d/apache2 restart  

Type:

service apache2 restart

J'ai juste eu la même erreur (avec PHP 5.2.6), et tout ce que j'avais à faire était d' activer le pilote PDO spécifique à MySQL :

TL; DR

Dans votre fichier php.ini , vous devriez avoir la ligne suivante (sans commentaire):

  • extension=php_pdo_mysql.dll sous Windows
  • extension=php_pdo_mysql.so sur Linux / Mac

Plus longue explication:

  1. ouvrir php.ini dans un éditeur de texte

    • Par exemple, son chemin par défaut sous Windows: C:\Program Files (x86)\PHP\v5.X\php.ini (remplacez v5.x par la version installée) ou C:\Windows\php.ini , etc.
    • ou sous Linux: /etc/php5/apache2/php.ini (par exemple, c'est le chemin sur Ubuntu) ou /etc/php5/cli/php.ini , /etc/php5/cgi/php.ini , etc.
    • ou vous pouvez apprendre à connaître sa situation :
      • php --ini | find /i "Loaded" php --ini | find /i "Loaded" dans l'invite de commande Windows OU
      • php --ini | grep "Loaded" php --ini | grep "Loaded" dans le terminal Linux / Mac
      • en utilisant phpinfo() , et en recherchant la ligne "Loaded Configuration File"
  2. et supprimez le point-virgule du début de la ligne suivante (pour le décommenter):

    • ;extension=php_pdo_mysql.dll sous Windows
      • OU ;extension=php_pdo_mysql.so sur Linux / Mac
    • bien sûr, si cette ligne n'existe pas, vous devriez la coller
    • donc la ligne attendue ressemblerait à ceci dans php.ini :
      • extension=php_pdo_mysql.dll sous Windows
      • OU extension=php_pdo_mysql.so sur Linux / Mac
  3. Vous devrez peut-être redémarrer votre serveur Web.

Cela a résolu mon problème.


L'utilisation de la valeur int 1002 semble fonctionner pour PHP 5.3.0:

public static function createDB() {
    $dbHost="localhost";
    $dbName="project";
    $dbUser="admin";
    $dbPassword="whatever";
    $dbOptions=array(1002 => 'SET NAMES utf8',);
    return new DB($dbHost, $dbName, $dbUser, $dbPassword,$dbOptions);
}

function createConnexion() {
    return new PDO(
        "mysql:host=$this->dbHost;dbname=$this->dbName",
        $this->dbUser,
        $this->dbPassword,
        $this->dbOptions); 
}

Pour Centos, il me manquait la bibliothèque php-mysql:

yum install php-mysql

service httpd restart

Il n'est pas nécessaire d'activer une extension dans php.ini, elle est chargée par défaut.


Vous pouvez essayer de le remplacer par 1002 ou émettre votre requête d'initialisation juste après l'ouverture d'une connexion.







pdo