Mysqlnd aktif sürücü olup olmadığını nasıl anlarsınız?

4 Cevap php

Belki açık bir soru, ama ben emin olmak istiyorum.

Bu mysqlnd olmadığını nasıl bilebilirim aktif sürücü nedir?

I'm runing PHP 5.3 and MySQL 5.1.37. In phpinfo() mysqlnd is listed but only with this I can't be sure if I'm using MySQLnd or the old driver...

Phpinfo Özü () çıkış

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 $

Ben PDO kullanarak yaşıyorum ve PDO sürücü mysql diyor ...

4 Cevap

Bu hile yapmak gerekir:

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

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

Onun aktif PDO sürücüsü ise, algılamak sonra MySQL PDO nesnesi oluşturmak için:

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

Sürücü (libmysql veya mysqlnd) derleme sırasında seçilmiş olup, bu ikisinin her biri mysql, mysqli'nin ve PDO_MYSQL için independatly belirtilebilir.

İşte mysqlnd karşılık üç yapılandırma seçenekleri şunlardır:

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

Bu yüzden ya üç olguda mysqlnd kullanarak Ahre görünüyor.

PDO durumda, MySQL sürücüsü yüklü var - ve bu bir mysqlnd dayanmaktadır derlendi.

these settings varsa belki kontrol? phpinfo () farklı bir nedenle başka ini ayarlarından onları vermektedir. 5,3 hakkında emin değil 5.4, için çalışır.

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

Kullandığınız wether mysqli_fetch_all gerçekten tarif etmez denetleniyor mysqlnd. Aksine, sizin mysqli extension etkin olduğunu söylüyor.

MySQLi sadece PHP'nin önceki sürümlerinde sağlanan mysql uzantısı güncelleştirilmiş bir sürümüdür.

The mysql extension, the mysqli extension and the PDO MySQL driver can each be individually configured to use either libmysqlclient or mysqlnd

Bu kod:

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

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

Hiçbir şey yankılanan değil mysqli etkin / yüklü / derlenmiş ve eski mysql uzantısını kullanıyor olabilirsiniz olmadığını göstermektedir.

Libmysqlclient ile mysql vs mysqlnd ile mysqli'nin kontrol etmek için daha iyi bir yolu bu yapmaktır:

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

Bu çalışıyor çünkü mysqlnd provides three additional functions that work only when mysqlnd is used as the driver.

Son olarak, PDO çek $pdo değişkeni ilk tanımlanmış olması gerekir.

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