source

MySQLd가 활성 드라이버인지 확인하는 방법

factcode 2022. 9. 24. 09:57
반응형

MySQLd가 활성 드라이버인지 확인하는 방법

당연한 질문일 수도 있지만 확실히 하고 싶어요.

MySQLd가 액티브 드라이버인지 어떻게 알 수 있습니까?

PHP 5.3과 MySQL 5.1.37을 실행하고 있습니다.phpinfo() mysqlnd에는 표시되어 있습니다만, 이것만으로는 MySQLd를 사용하고 있는지 이전 드라이버를 사용하고 있는지 알 수 없습니다.

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 8.1 이후 작동하지 않습니다.

에 하고 있는 는, 「」를 참조해 .mysqli이렇게 하면 효과가 있습니다.

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

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

이 액티브한 「」인지 한다.PDOMySQL PDO, MySQL PDO.

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

formysqli_fetch_all 것은 .mysqlndmysqli 확장이 유효하다고 표시됩니다.

는 MySQLi 입니다.mysqlPHP를 사용하다

mysql " " " 입니다.mysqli와 " " "를 참조해 주세요.PDO MySQL driver는 각각 libmysqlclient 중 하나를 할 수 .

다음 코드:

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

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

nothing은 컴파일installed로 되어 있지 mysqli는 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가 드라이버로 사용되는 경우에만 동작하는 3가지 추가 기능을 제공하기 때문입니다.

에는 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, mysql 및 pdo_mysql에 대해 각각 개별적으로 지정할 수 있습니다.

다음으로 mysqlnd에 대응하는3가지 설정 옵션을 나타냅니다.

  --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]


mysql, mysqli do pdo_mysql 모클 、 " api api api API 전 " mysqlnd 5.0.5 - dev " 。

그래서 당신은 세 가지 경우 모두 mysqlnd를 사용하고 있는 것 같습니다.

PDO의 경우 MySQL 드라이버가 설치되어 있으며, 그 드라이버는 mysqlnd를 기준으로 컴파일됩니다.

이게 내가 찾던 거야

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

설정이 존재하는지 확인해 주세요.phpinfo()는 어떤 이유로 다른 ini 설정과 다르게 표현합니다.5.4에서는 동작하지만 5.3에서는 동작하지 않습니다.

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

phpinfo()는 PHP 컴파일에 사용되는 "Configure 명령어"를 나열합니다.

다른 답변에서도 알 수 있듯이 mysqlnd는 php 설치/컴파일 프로세스 중 2가지 선택 항목 중 1개(기본값)입니다.

7.0.33용 phpinfo Configure 명령어는 다음과 같습니다.

'./configure' '--with-libdir=lib64' '--enable-bcmath' '--enable-dbase' '--enable-exif' '--enable-intl' '--enable-intl' '--enable-libxml' '--enable-do' string'rl' '--with-freetype-filename' '--with-gd' '--with-gmp' '--with-gmp' '--with-with-gmp' '--with-with-cerberos' '--with-mcrypt' '--with-mhash'-ql'-us'sock' '--with-mysqli=/usr/bin/usr_config' '--with-pdo-pgsql=/usr' '--with-pdo-sql=/usr' '--with-pdo-sqlite' '--with-pdo-spell-spell'

메모 --with-mysqli=/usr/bin/mysqi_config' '

및 --enable-mysqlnd' (이것에는 없습니다만, 5.6 php 빌드의 판독치)

--with-mysqli=는 libmysqlclient를 사용하고 있음을 의미하며 mysqlnd 대신 네이티브 드라이버를 사용하고 있습니다.

자세한 내용은 http://php.net/manual/en/mysqlinfo.library.choosing.php 를 참조해 주세요.

(이것이 오래되었다는 것은 알지만, 이 지식을 통해 몇 시간 동안 기술 지원에 대한 토론을 줄일 수 있었고, 저는 이것을 처음 보았습니다.)

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

반응형