IT story

MySQLnd가 활성 드라이버인지 확인하는 방법은 무엇입니까?

hot-time 2021. 1. 6. 20:23
반응형

MySQLnd가 활성 드라이버인지 확인하는 방법은 무엇입니까?


당연한 질문 일 수도 있지만 확실히하고 싶습니다.

MySQLnd가 활성 드라이버인지 어떻게 알 수 있습니까?

PHP 5.3 및 MySQL 5.1.37을 실행하고 있습니다. phpinfo () mysqlnd가 나열되어 있지만 이것만으로는 MySQLnd 또는 이전 드라이버를 사용하고 있는지 확인할 수 없습니다.

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 $ 

PDO를 사용하고 있는데 PDO 드라이버에 mysql이 표시됩니다.


이것은 트릭을 수행해야합니다.

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

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

활성 PDO 드라이버인지 감지하려면 MySQL PDO 개체를 만든 다음 다음을 수행하십시오.

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

에 대한 확인 mysqli_fetch_all은 사용 중인지 여부를 설명하지 않습니다 mysqlnd. 오히려 mysqli 확장이 활성화되어 있음을 나타냅니다.

MySQLi는 mysql이전 버전의 PHP에서 제공되었던 확장 의 업데이트 된 버전입니다 .

mysql확장의 mysqli확장 및 PDO MySQL driver수있는 각각의 개별적으로 또는 하나 libmysqlclient mysqlnd을 사용하도록 구성 될

이 코드 :

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

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

아무것도 에코하지 않으면 mysqli가 컴파일 / 활성화 / 설치되지 않았으며 이전 mysql확장을 사용하고있을 수 있습니다 .

mysqlnd를 사용하는 mysqli와 libmysqlclient를 사용하는 mysql을 확인하는 더 좋은 방법은 다음과 같이하는 것입니다.

<?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>";
}

이것은 mysqlnd가 드라이버로 mysqlnd를 사용할 때만 작동하는 세 가지 추가 기능을 제공 하기 때문에 작동합니다 .

마지막으로 PDO 검사는 $pdo변수를 먼저 정의 해야합니다 .

$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>';
}
?>

드라이버 (libmysql 또는 mysqlnd)는 컴파일 타임에 선택되며,이 둘 중 하나는 mysql, mysqli 및 pdo_mysql에 대해 독립적으로 지정할 수 있습니다.

다음은 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]


In your case, the "Client API version" is "mysqlnd 5.0.5-dev" for both mysql, mysqli, and pdo_mysql.

So it seems you ahre using mysqlnd in either three cases.

In the case of PDO, you have the MySQL driver installed -- and that one is compiled based on mysqlnd.


This is what I was looking for

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

Maybe check if these settings exist? phpinfo() renders them differently from other ini settings for some reason. Works for 5.4, not sure about 5.3.

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

phpinfo() in the beginning lists the "Configure Command" used to compile PHP.

As they state in other answers mysqlnd is 1 (the default) of 2 choices during the php install/compile process.

My phpinfo Configure Command for 7.0.33 is:

'./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'

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

and --enable-mysqlnd' ' (Not in this one but a readout on a 5.6 php build)

--with-mysqli= is pointing to a directory meaning it is using libmysqlclient If it was mysqlnd instead then it is using the native driver.

For more info on this http://php.net/manual/en/mysqlinfo.library.choosing.php

(I know this is way old however this knowledge would have saved me hours of tech support debate and I seen this first.)

ReferenceURL : https://stackoverflow.com/questions/1475701/how-to-know-if-mysqlnd-is-the-active-driver

반응형