web-dev-qa-db-fra.com

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 lance PHP 5.3 et MySQL 5.1.37. Dans phpinfo () mysqlnd est répertorié mais seulement avec cela, 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 ...

55
The Disintegrator

Cela devrait faire l'affaire:

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

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

Pour détecter s'il s'agit du pilote PDO actif, créez votre objet MySQL PDO puis:

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

Vérification de mysqli_fetch_all ne décrit pas vraiment si vous utilisez mysqlnd. Au contraire, il indique que vous avez extension mysqli activé.

MySQLi est simplement une version mise à jour de l'extension mysql qui était fournie dans les versions antérieures de PHP.

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

Ce code:

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

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

ne faire écho à rien suggère que vous n'avez pas compilé/activé/installé mysqli, et que vous utilisez peut-être l'ancienne extension mysql.

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

<?php
if (function_exists('mysql_connect')) {
    echo "- MySQL <b>is installed</b>.<br>";
} else  {
    echo "- MySQL <b>is not</b> installed.<br>";
}

if (function_exists('mysqli_connect')) {
    echo "- MySQLi <b>is installed</b>.<br>";
} else {
    echo "- MySQLi <b>is not installed</b>.<br>";
}

if (function_exists('mysqli_get_client_stats')) {
    echo "- MySQLnd driver is being used.<br>";
} else {
    echo "- libmysqlclient driver is being used.<br>";
}

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

Enfin, la vérification AOP doit avoir le $pdo variable définie en premier.

$dbHost = "localhost";
$dbUser = "root";
$dbPass = "password";
$dbName = "database";

$pdo = new PDO('mysql:Host='.$dbHost.';dbname='.$dbName, $dbUser, $dbPass);
if (strpos($pdo->getAttribute(PDO::ATTR_CLIENT_VERSION), 'mysqlnd') !== false) {
    echo '- PDO MySQLnd <b>is enabled</b>.<br>';
} else {
    echo '- PDO MySQLnd <b>is not enabled</b>.<br>';
}
?>
36
Tim Groeneveld

Le pilote (libmysql ou mysqlnd) est choisi au moment de la compilation, et chacun de ces deux peut être spécifié indépendamment 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 utilisiez mysqlnd dans les trois cas.

Dans le cas de PDO, vous avez installé le pilote MySQL - et celui-ci est compilé sur la base de mysqlnd.

10
Pascal MARTIN

C'est ce que je cherchais

<?php
if (extension_loaded('mysqlnd')) {
}
?>
9
mikeytown2

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
3
Bad Habit

phpinfo () au début répertorie la "Configure Configure" utilisée pour compiler PHP.

Comme ils l'indiquent dans d'autres réponses, mysqlnd est 1 (la valeur par défaut) de 2 choix pendant le processus d'installation/compilation de php.

Ma commande de configuration phpinfo pour 7.0.33 est:

'./configure' '--prefix =/opt/php70' '--with-libdir = lib64' '--enable-bcmath' '--enable-calendar' '--enable-dbase' '--enable- exif '' --enable-ftp '' --enable-Gd-native-ttf '' --enable-intl '' --enable-libxml '' --enable-mbstring '' --enable-pdo '' - -enable-soap '' --enable-sockets '' --enable-sqlite-utf8 '' --enable-wddx '' --enable-Zip '' --with-bz2 '' --with-curl '' --with-freetype-dir '' --with-Gd '' --with-gettext '' --with-gmp '' --with-imap '' --with-imap-ssl '' --with- jpeg-dir =/usr '' --with-kerberos '' --with-mcrypt '' --with-mhash '' --with-mssql '' --with-mysql =/usr '' --with- mysql-sock =/var/lib/mysql/mysql.sock '' --with-mysqli =/usr/bin/mysql_config '' --with-openssl '' --with-pdo-mysql =/usr '' - -with-pdo-pgsql =/usr '' --with-pgsql =/usr '' --with-pdo-sqlite '' --with-png-dir '' --with-pspell '' --with- sqlite '' --with-system-tzdata '' --with-tidy '' --with-unixODBC '' --with-xmlrpc '' --with-xsl '' --with-zlib '

Remarque --with-mysqli =/usr/bin/mysql_config ''

et --enable-mysqlnd '' (Pas dans celui-ci mais une lecture sur une version 5.6 php)

--with-mysqli = pointe vers un répertoire signifiant qu'il utilise libmysqlclient Si c'était mysqlnd à la place, alors il utilise le pilote natif.

Pour plus d'informations à ce sujet http://php.net/manual/en/mysqlinfo.library.choosing.php

(Je sais que c'est très ancien, mais cette connaissance m'aurait épargné des heures de débat sur le support technique et je l'ai vu en premier.)

1
JSG