문제

PHP에서 MySQLI 클래스를 사용하는 데 어려움이 있으며 어디서나 답을 찾을 수 없었습니다.

내 스크립트에서 클래스는 함수 전체에서 사용하는 MySQLI 연결을 만듭니다. 그 후이 스크립트는 포크입니다. 연결은 어린이들도 사용하지만, 어린이가 죽을 때 부모의 연결이 닫히는 문제 (MySQL 서버가 사라 졌음)의 문제가 발생합니다.

MySQLI로 전환하기 전에 (MySQL을 사용 중) 간단히 MySQL_Ping에 전화하여 부모 프로세스에서 쿼리를 수행하기 전에 DB 연결이 있었는지 확인했습니다. MySQLI는 비슷한 핑 함수를 가지고 있지만 연결이 사라지면 실제로 다시 연결되지는 않습니다. Luck (php.ini 및 ini_set 사용)없이 Global 설정에서 mysqli.reconnect =를 사용해 보았습니다.

PHP MySQL_Connect 함수를 사용하면 이미 기존의 연결을 가져올 수 있으므로 MySQLI 대신 MySQL을 사용하는 경우 프로세스가 포장 된 직후에 어린이의 연결을 재사용 할 수 있습니다. 그러나 mysqli는 그러한 기능이없는 것 같습니다 ...

내가 할 수 있었던 유일한 일은 mysqli-> ping ()에게 전화 한 것입니다. 그리고 그것이 거짓을 반환하면 부모의 데이터베이스에 다시 연결됩니다. 이것은 매우 비효율적이며 MySQL로 다시 변경 해야하는 MySQLI (수동 재 연결이 필요하지 않음)로 올바르게 수행하는 방법을 알아냅니다.

제안이 있습니까?

도움이 되었습니까?

해결책

문서 mysqli_ping() 글로벌 옵션을 설정하면 mysqli.reconnect 그런 다음 1 ~ 1 (php.ini) mysqli_ping() 연결이 사라 졌을 때 다시 연결됩니다.

업데이트 : 2009 년 에이 질문에 대답 한 이후 PHP는 대부분 mysqlnd 대신 기본적으로 드라이버 libmysql. 아래 의견에서 언급했듯이 mysqlnd 지원하지 않습니다 mysqli_ping() 기능과 PHP 개발자는 의도적으로이를 수행했습니다. https://bugs.php.net/bug.php?id=52561

따라서 더 이상 PHP에서 자동 재 연결 솔루션이없는 것으로 보입니다.

다른 팁

u는 조금 다른 것을 시도 할 수 있습니다 .. 핑 대신 .. "now ()"과 같은 정말 간단한 저 강도 쿼리를 보내고 더 나은 결과를 얻을 수 있는지 확인하십시오.

영구 연결을 사용할 수 없습니까? 또한 포크 ()가 정말로 필요합니까?

function IsConnected() {
    if (empty($this->_connectionID) === FALSE && mysqli_ping($this->_connectionID) === TRUE) {
        return true; // still have connect
    }
    $this->_connectionID = false;
    return false; // lose connection
}

사용 http://www.php.net/manual/en/mysqli.real-connect.php ... PHP를 다시 설치하고 php.ini 설정을 확인하십시오

mysqli.reconnect에서 my.cng에서 mysqli.reconnect를 설정해야한다고 생각합니다. 이는 php.ini 대신 mysql config 인 my.cng에서 ini_set을 통해 다시 연결을 변경할 수 없었지만 Sys Admin은 my.cnf에서 수행했습니다.

그래서 Tad는 다른 사람들이 php.ini 내에서 그것을 해냈다는 것을 혼란스럽게했습니다 ....

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top