2013-07-26 7 views
2

PDO :: MYSQL_ATTR_INIT_COMMAND가 쿼리를 분석 한 것 같습니다. 직접 시도하십시오.MYSQL_ATTR_INIT_COMMAND가 사용 된 경우 PDO 발생 오류

다음 :

$connection = new \PDO("mysql:host=localhost;dbname=php_orm_test", "dev", "dev",[ 
    PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES UTF8; SET CHARACTER SET UTF8; SET character_set_connection=UTF8; SET character_set_client=UTF8;" 
    ]); 
    $statement = $connection->prepare("describe users"); 
    $statement->execute(); 
    $statement->fetchAll(\PDO::FETCH_ASSOC); 
    var_dump($statement->errorInfo()); 
    $statement->closeCursor(); 

예외 :

array(3) { 
    [0]=> 
    string(5) "00000" 
    [1]=> 
    int(2014) 
    [2]=> 
    string(269) "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." 
} 

I ...을 MYSQL_ATTR_INIT_COMMAND 모든 것을 대신 잘 작동 어떤 생각을 제거하면? 심지어이 작업을 수행

공지 사항 ...

PDO::MYSQL_ATTR_INIT_COMMAND => self::DRIVER_INIT, 
    PDO::MYSQL_ATTR_USE_BUFFERED_QUERY => true 
+0

"SET NAMES UTF8; SET CHARACTER SET UTF8; SET character_set_connection = UTF8; SET character_set_client = UTF8;"을 의미합니까? 쿼리? mysql.cnf를 수정하지 않고 utf8 인코딩 을 사용하려면. 어쨌든 고마워! –

+0

참고로 utf8 대신 utf8mb4를 원할 수도 있습니다. https://mathiasbynens.be/notes/mysql-utf8mb4를 참조하십시오. – bodo

답변

6

당신은 PHP> = 5.3.6을 사용하므로 DSN에 캐릭터를 추가하고 PDO::MYSQL_ATTR_INIT_COMMAND를 사용하지 않을 수 있습니다. 또한 PDO::MYSQL_ATTR_INIT_COMMAND으로 1 개의 쿼리 만 실행할 수 있다고 생각합니다. 그게 문제 일 수 있습니다.

mysql:host=localhost;dbname=php_orm_test;charset=utf8 
+0

글쎄, init 명령이 버그를 일으키는 이유에 대해서는 설명하지 않지만이 명령을 피하고 utf8을 다시 작성하여 계속 사용할 수있는 방법입니다! –

+0

쿼리가 1 개입니까? 꽤 바보 같아서 ... 이걸 발견 한 링크가 있니? 고마워! –

+0

[여기] (http://grokbase.com/t/php/php-bugs/0978f443vg/48859-new-pdo-mysql-does-not-support-multiple-inital-queries)는 버그 보고서입니다. 새로운 PHP 버전에서 수정되었는지는 모르겠다. 그러나 그렇지 않은 것처럼 보입니다. – bitWorking

4

당신이 적어도 사용 여러 SET 문, 예를 들어 쉼표로 구분 할 수 있습니다 SET names utf8, @@session.sql_mode = '';

관련 문제