php array - Constante de classe non définie 'MYSQL_ATTR_INIT_COMMAND' avec pdo




define call (9)

$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é?


Answers

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.


Vous pouvez essayer de le remplacer par 1002 ou é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é et j'ai redémarré apache et tout fonctionnait bien


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

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.


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, qui fait que cette constante n'existe plus - ou du moins pas quand le pilote mysqlnd est utilisé (et c'est celui qui est configuré par défaut)

Je suppose qu'une solution temporaire, comme suggéré dans bugs.php.net/47224 , pourrait être d'utiliser directement la valeur entière 1002 , au lieu de la constante ...

Mais notez que vous devez revenir à l’utilisation de la constante dès que possible - car cela rend le code plus facile à comprendre.


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.


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.


Notice: Trying to get property of non-object error

Happens when you try to access a property of an object while there is no object.

A typical example for a non-object notice would be

$users = json_decode('[{"name": "hakre"}]');
echo $users->name; # Notice: Trying to get property of non-object

In this case, $users is an array (so not an object) and it does not have any properties.

This is similar to accessing a non-existing index or key of an array (see Notice: Undefined Index ).

This example is much simplified. Most often such a notice signals an unchecked return value, eg when a library returns NULL if an object does not exists or just an unexpected non-object value (eg in an Xpath result, JSON structures with unexpected format, XML with unexpected format etc.) but the code does not check for such a condition.

As those non-objects are often processed further on, often a fatal-error happens next on calling an object method on a non-object (see: Fatal error: Call to a member function ... on a non-object ) halting the script.

It can be easily prevented by checking for error conditions and/or that a variable matches an expectation. Here such a notice with a DOMXPath example:

$result  = $xpath->query("//*[@id='detail-sections']/div[1]");
$divText = $result->item(0)->nodeValue; # Notice: Trying to get property of non-object

The problem is accessing the nodeValue property (field) of the first item while it has not been checked if it exists or not in the $result collection. Instead it pays to make the code more explicit by assigning variables to the objects the code operates on:

$result  = $xpath->query("//*[@id='detail-sections']/div[1]");
$div     = $result->item(0);
$divText = "-/-";
if ($div) {
    $divText = $div->nodeValue;
}
echo $divText;

Related errors:

  • Avis: Index indéfini
  • Fatal error: Call to a member function ... on a non-object






php pdo