PHP5.4 및 MySql과 함께 PDO를 사용하는 동안 예외가 발생했습니다.PHP5 MySql 및 PDO 예외
거의 모든 다른 게시물, 블로그, 매뉴얼, 스 니펫,이 오류와 관련된 모든 것을 읽었으며 내가 행운으로 보았던 모든 것을 시도했습니다.
그래서 나는 내 특정 코드에서 잘못한 부분에 대해 구체적으로 알려주고 나에게 지적 할 수 있기를 바랍니다.
첫 부분 :
$stmt = $this->dbConn->prepare("CALL getPopularProducts()");
$stmt->execute();
$rows = $stmt->fetchAll(\PDO::FETCH_ASSOC);
//$stmt->closeCursor();
foreach ($rows as $row) {
$p = new entity\LightingPole();
/* doing basic set stuff here so code omitted */
// apply category to product
$categroyTranslator = new ProductCategoryTranslator();
$categroyTranslator->applyProductCategory($p);
둘째 부분 :
여기이 오류로 이어질 코드의 부분이다 : 여기 오류이며SQLSTATE[HY000]: General error: 2014 Cannot execute queries while other unbuffered queries are active. Consider using PDOStatement::fetchAll(). Alternatively, if your code is only ever going to run against mysql, you may enable query buffering by setting the PDO::MYSQL_ATTR_USE_BUFFERED_QUERY attribute.
namespace lib\database;
class Database
{
protected static $instance;
public static function getInstance()
{
if(self::$instance == null)
{
$dsn = "mydsn";
$user = "myuser";
$password = "mypassword";
self::$instance->setAttribute(\PDO::ATTR_EMULATE_PREPARES, false);
self::$instance->setAttribute(\PDO::MYSQL_ATTR_USE_BUFFERED_QUERY, true);
self::$instance->setAttribute(\PDO::ATTR_ERRMODE, \PDO::ERRMODE_EXCEPTION);
}
return self::$instance;
}
private function __construct() {}
private function __clone() {}
}
당신은 내가 주석 한 $stmt->closeCursor()
에 대한 호출을 알 수 있습니다 :
여기 내 데이터베이스 클래스입니다. 나는이 코드 줄을 포함 할 때 나는 다음과 같은 오류 얻을 :
이제SQLSTATE[HY000]: General error: 2006 MySQL server has gone away
는, 일반 기능의 관점에서 설명하기를 제가 기본적으로 그들을 통해 반복, 인기 제품 목록을 점점 점점 여기서 뭘하고있는 모든 ProductCategory와 같은 관련 제품 데이터 ...
이 오류는 루프의 첫 번째 제품에서만 발생합니다. 즉, 두 번째로 applyProductCategory()
이라고 부르면 문제가 없습니다. 다른 한가지는 applyProductCategory
아래에 연결된 데이터의 다른 유형을 검색하기위한 호출이 약 4 개 더 있으며 그 중 하나를 수행하는 동안 오류가 발생하지 않는다는 것입니다.
그래서 첫 번째 제품에는 절대로 관련된 ProductCategory가 없다는 점을 제외하고는 내 모든 인기 제품이 괜찮습니다.
나는 이것을 일으키는 길을 놓친 것을 발견하는 것을 고대하고 있습니다. 바라건대 당신은 올바른 방향으로 나를 가리킬 수 있습니다.
왜 'PDO'를 탈출하고 있습니까? – Erik
@Erik, 나는 PHP 네임 스페이스를 사용하고 있습니다. 나는 PDO를 벗어나고 있지 않습니다. PHP가 내 수업에서 PDO를 찾지 않도록 슬래시가 필요합니다. – samazi
쿨! 당신은 매일 새로운 것을 배웁니다. – Erik