59 votes

Comment savoir si MySQLnd est le pilote actif?

C'est peut-être une question évidente, mais je veux en être sûr.

Comment savoir si MySQLnd est le pilote actif?

Je suis en cours d'exécution PHP 5.3 et MySQL 5.1.37. Dans phpinfo (), mysqlnd est répertorié mais uniquement avec ceci, je ne peux pas être sûr si j'utilise MySQLnd ou l'ancien pilote ...

Extrait de la sortie phpinfo ()

 mysql
MySQL Support   enabled
Active Persistent Links     0
Active Links    0
Client API version  mysqlnd 5.0.5-dev - 081106 - $Revision: 1.3.2.27 $ 

mysqli
MysqlI Support  enabled
Client API library version  mysqlnd 5.0.5-dev - 081106 - $Revision: 1.3.2.27 $
Active Persistent Links     0
Inactive Persistent Links   0
Active Links    26 

mysqlnd
mysqlnd enabled
Version     mysqlnd 5.0.5-dev - 081106 - $Revision: 1.3.2.27 $ 

PDO
PDO support enabled
PDO drivers     mysql

pdo_mysql
PDO Driver for MySQL    enabled
Client API version  mysqlnd 5.0.5-dev - 081106 - $Revision: 1.3.2.27 $
 

J'utilise PDO, et le pilote PDO dit mysql ...

61voto

Inspire Points 1362

Cela devrait faire l'affaire:

 <?php
$mysqlnd = function_exists('mysqli_fetch_all');

if ($mysqlnd) {
    echo 'mysqlnd enabled!';
}
 

Pour détecter si c'est le pilote PDO actif, créez votre objet PDO MySQL puis:

 if (strpos($pdo->getAttribute(PDO::ATTR_CLIENT_VERSION), 'mysqlnd') !== false) {
    echo 'PDO MySQLnd enabled!';
}
 

43voto

timgws Points 1437

La vérification de mysqli_fetch_all ne décrivent pas vraiment si vous utilisez mysqlnd. Plutôt, il dit que vous avez l' extension mysqli activé.

MySQLi est tout simplement une version mise à jour de l' mysql extension qui a été fourni dans les versions précédentes de PHP.

L' mysql extension, l' mysqli d'extension et de l' PDO MySQL driver peuvent être configurés individuellement pour utiliser libmysqlclient ou mysqlnd

Ce code:

<?php
$mysqlnd = function_exists('mysqli_fetch_all');

if ($mysqlnd) {
    echo 'mysqlnd enabled!';
}

pas d'écho rien ne laisse croire que vous n'avez pas mysqli compilé/activé/installé, et peut-être le plus âgé mysql extension.

Une meilleure façon de vérifier pour mysqli avec mysqlnd vs mysql avec libmysqlclient est de faire ceci:

<?php
$hasMySQL = false;
$hasMySQLi = false;
$withMySQLnd = false;

if (function_exists('mysql_connect')) {
    $hasMySQL = true;
    $sentence.= "(Deprecated) MySQL <b>is installed</b> ";
} else 
    $sentence.= "(Deprecated) MySQL <b>is not</b> installed ";

if (function_exists('mysqli_connect')) {
    $hasMySQLi = true;
    $sentence.= "and the new (improved) MySQL <b>is installed</b>. ";
} else
    $sentence.= "and the new (improved) MySQL <b>is not installed</b>. ";

if (function_exists('mysqli_get_client_stats')) {
    $withMySQLnd = true;
    $sentence.= "This server is using MySQLnd as the driver.";
} else
    $sentence.= "This server is using libmysqlclient as the driver.";

echo $sentence;

Cela fonctionne parce que mysqlnd fournit trois fonctions supplémentaires qui ne fonctionnent que lorsque mysqlnd est utilisé en tant que pilote.

Enfin, l'AOP doivent avoir l' $pdo variable définie en premier.

$db = new PDO('mysql:host=localhost;dbname=<SOMEDB>', '<USERNAME>', 'PASSWORD');
if (strpos($pdo->getAttribute(PDO::ATTR_CLIENT_VERSION), 'mysqlnd') !== false) {
    echo 'PDO MySQLnd enabled!';
}

10voto

Pascal MARTIN Points 195780

Le pilote (libmysql ou mysqlnd) est choisie au moment de la compilation, et chacun de ces deux peut être spécifié independatly pour mysql, mysqli, et pdo_mysql.

Voici les trois options de configuration qui correspondent à mysqlnd :

  --with-mysql[=DIR]      Include MySQL support.  DIR is the MySQL base
                          directory.  If mysqlnd is passed as DIR,
                          the MySQL native driver will be used [/usr/local]
  --with-mysqli[=FILE]    Include MySQLi support.  FILE is the path
                          to mysql_config.  If mysqlnd is passed as FILE,
                          the MySQL native driver will be used [mysql_config]
  --with-pdo-mysql[=DIR]    PDO: MySQL support. DIR is the MySQL base directoy
                                 If mysqlnd is passed as DIR, the MySQL native
                                 native driver will be used [/usr/local]


Dans votre cas, la "version de l'API Client" est "mysqlnd 5.0.5-dev" pour mysql, mysqli, et pdo_mysql.

Il semble donc que vous ahre à l'aide de mysqlnd dans les trois cas.

Dans le cas de l'AOP, vous avez le pilote MySQL installé, et que l'on est établie sur la base de mysqlnd.

3voto

Bad Habit Points 21

Peut-être vérifier si ces paramètres existent? phpinfo () les rend différemment des autres paramètres ini pour une raison quelconque. Fonctionne pour 5.4, pas sûr de 5.3.

 ini_get('mysqlnd.debug') !== false
 

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X