2014-02-19 2 views
2

getAttribute 함수를 사용하려고하면이 오류가 발생합니다. 비 객체에서 getAttribute() 멤버 함수를 호출합니다. mysqlnd가 활성화되어 있지만 get_result()를 사용할 수 없다는 생각이 드는군요?phpinfo는 활성 드라이버이거나 혼동 스럽습니다.

이것은 최근에 나를 괴롭 히고 있습니다. @ 포스트 파이어는 또 다른 포스트에서 올바르게 대답했지만 나에게는 효과가 없다. 내가이 에코되면 How to know if MySQLnd is the active driver?

: 당신은 여기에서 찾을 수 있습니다

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

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

아무것도 전혀 발생하지 않기 때문에 분명히 내은 phpinfo()가 활성화되어 말한다하더라도 사용할 수 없습니다이야?

의 활성 PDO 드라이버가 다음 MySQL을 PDO 개체를 만드는 경우 감지하려면 :

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

을 내가 아닌 객체의 멤버 함수의 getAttribute()를 호출 얻을이 때 ..

어떤 도움이라도 대단히 감사하겠습니다. 미리 감사드립니다.

+1

가능한 복제본 [MySQLnd가 활성 드라이버인지 어떻게 알 수 있습니까?] (http://stackoverflow.com/questions/1475701/how-to-know-if-mysqlnd-is-the-active-driver) – thaJeztah

답변

1

mysqli_fetch_all을 확인하는 것은 실제로 mysqlnd을 사용하는 것이 아닙니다. 오히려 mysqli extension을 사용하도록 설정했습니다.

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

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

이 코드 :

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

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

아무것도 반향하지

는 mysqli 컴파일이// 사용 가능 MySQLnd으로 설치하지 않은 것이 좋습니다. 구형 mysql 또는 MySQL PDO 드라이버와 같은 PHP 내부의 다른 클라이언트는 여전히 mysqld를 사용할 수있다.

libmysqlclient와 MySQL의 대 mysqlnd와 mysqli를 확인하기위한 더 좋은 방법은이 작업을 수행하는 것입니다 : 이것은 mysqlnd provides three additional functions that work only when mysqlnd is used as the driver 때문에 작동

<?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_fetch_all')) { 
    $withMySQLnd = true; 
    $sentence.= "This server is using MySQLnd as the driver."; 
} else 
    $sentence.= "This server is using libmysqlclient as the driver."; 

echo $sentence; 

. mysqli_fetch_all은 이러한 함수 중 하나입니다. 그러나 mysqli가 mysqlnd로 컴파일되었는지 보여주는 함수뿐만 아니라 mysqli가 컴파일되었는지 보여주는 함수를 검사하는 것이 가장 좋습니다.

이렇게하면 더 나은 오류 메시지를 클라이언트에 표시 할 수 있습니다.

마지막으로 PDO 검사에는 $pdo 변수가 먼저 정의되어 있어야합니다.

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

확실하게 권위있는 성명서를 내기 전에 mysql_fetch_all 매뉴얼 페이지를 읽었습니까? –

+0

@YourCommonSense "아무것도 표시하지 않으면 mysqli가 컴파일/사용 가능/설치되지 않았으며 이전 MySQL 확장을 사용하고있는 것입니다." ... 예. 내가 말하고자하는 것은, mysqli가 mysqli에 대해 활성화되어 있는지를 검사 할 것이지만 실제로는 mysqld가 PHP와 함께 사용 가능한 모든 MySQL 클라이언트 구현에서 활성화되어 있는지 확인하지는 않습니다. – timgws

0

phpinfo 또는 코드에서 mysqlnd 드라이버 자체를 검사 할 필요가 없습니다.

다른 API도 확인해야 할 필요는 없습니다. 원하는 경우 을 확인해야합니다.은 다른 것이 아닌 mysqlnd를 기반으로합니다. 따라서, 당신이 PDO를 필요로한다면 mysqli를 검사하는 것은 말이되지 않습니다.

PDO를 확인하려면 먼저 을 입력해야합니다.

관련 문제