PHP MySQLI 재 연결 문제
문제
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 내에서 그것을 해냈다는 것을 혼란스럽게했습니다 ....