$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-il renommé?
Je viens d'avoir la même erreur (avec PHP 5.2.6), et tout ce que j'avais à faire est de activer le pilote PDO spécifique à MySQL :
Dans votre fichier php.ini
, vous devriez avoir la ligne suivante (non commentée):
extension=php_pdo_mysql.dll
sous Windowsextension=php_pdo_mysql.so
sous Linux/Macouvrir php.ini
dans un éditeur de texte
C:\Program Files (x86)\PHP\v5.X\php.ini
(remplacez v5.x par la version que vous avez installée) ou C:\Windows\php.ini
, etc./etc/php5/Apache2/php.ini
(par exemple, il s’agit du chemin sous Ubuntu) ou /etc/php5/cli/php.ini
, /etc/php5/cgi/php.ini
, etc.php --ini | find /i "Loaded"
dans l'invite de commande Windows OUphp --ini | grep "Loaded"
sous Linux/Macphpinfo()
et en recherchant la ligne "Fichier de configuration chargé"et supprime le point-virgule à partir du début de la ligne suivante (pour la décommenter):
;extension=php_pdo_mysql.dll
sous Windows ;extension=php_pdo_mysql.so
sous Linux/Macphp.ini
: .____.extension=php_pdo_mysql.dll
sous Windowsextension=php_pdo_mysql.so
sous Linux/MacVous devrez peut-être redémarrer votre serveur Web.
Cela a résolu mon problème.
J'ai eu la même erreur, sur debian6, alors que je n'avais pas encore installé php5-mysql
.
Alors je l'ai installé, puis redémarré Apache2
apt-get install php5-mysql
/etc/init.d/Apache2 restart
Alors l'erreur est partie.
Si vous avez la même erreur sur Ubuntu, au lieu de:
/etc/init.d/Apache2 restart
Type:
service Apache2 restart
Il semble être disponible uniquement avec le pilote mysqlnd .
Essayez de le remplacer par le nombre entier qu’il représente; 1002, si je ne me trompe pas.
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.
Je viens d'essayer avec PHP 5.2, et cette constante semble exister:
var_dump(PDO::MYSQL_ATTR_INIT_COMMAND);
Donne moi :
int 1002
Mais il semble qu'il y ait un bogue dans PHP 5.3, ce qui fait que cette constante n'existe plus - ou du moins, pas lorsque le pilote mysqlnd est utilisé (et c'est celui qui est configuré par défaut)
Je suppose qu'une solution temporaire, comme suggéré sur ce rapport de bogue , pourrait être d'utiliser directement la valeur entière 1002
, au lieu du contenu ...
Mais notez que vous devriez recommencer à utiliser la constante le plus tôt possible, car cela rend le code plus facile à comprendre.
Vous pouvez essayer de le remplacer par 1002 ou d'émettre votre requête d'initialisation juste après l'ouverture d'une connexion.
Pour moi, il manquait MySQL PDO, j'ai recompilé mon PHP avec l'option --with-pdo-mysql
, je l'ai installé, puis redémarré Apache et tout fonctionnait correctement.
Ceci 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:
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.
Utiliser 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);
}
J'ai eu cette erreur ce matin, je venais de faire une nouvelle installation de Fedora 14 et j'essayais de remettre mes projets locaux en ligne. Il me manquait php-mysql, je l'ai installé via yum et l'erreur est maintenant partie.