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 ...
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!';
}
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'extensionmysqli
etPDO 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>';
}
?>
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.
C'est ce que je cherchais
<?php
if (extension_loaded('mysqlnd')) {
}
?>
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
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.)