Exibindo os valores de uma SQL com Doctrine 1.2x

Ao criar uma query com DQL (Doctrine Query Language), talvez você queira dar uma olhada na SQL gerada. Isso é possível através do comando abaixo:

var_dump($query->getSqlQuery());

Porém, no lugar dos valores das colunas (no caso do Where idade >= 18, por exemplo), exibe sinais de interrogação (prepared statement).

Para exibir os valores reais utilizados na DQL, basta utilizar o seguinte snippet:

$vals = $query->getFlattenedParams();
foreach(explode('?', $query->getSqlQuery()) as $i => $part) {
    $sql = (isset($sql) ? $sql : null) . $part;
    if (isset($vals[$i])) $sql .= $vals[$i];
}
 
echo $sql;

MySQL: Unknown or incorrect time zone: ‘America/Sao_Paulo’

Ao tentar definir o timezone em uma conexão através do seguinte comando:

SET time_zone='America/Sao_Paulo';

Estava recebendo o seguinte erro:

  • Unknown or incorrect time zone: ‘America/Sao_Paulo’

Para resolver (no Ubuntu), basta executar o seguinte comando:

mysql_tzinfo_to_sql /usr/share/zoneinfo | mysql -u root -p mysql

Update (2013-03-01):

Caso você não possua permissão para executar o comando acima, nem possibilidade de definir/alterar o default-time-zone (no caso de RDS), uma alternativa pode ser usar o comando abaixo na sua conexão (sempre antes de executar seu comando insert/select/update/delete, por exemplo):

SET time_zone = 'Brazil/West';

Lista de timezones do Brasil para o MySQL:

  • Brazil/Acre
  • Brazil/DeNoronha
  • Brazil/East (utilize esse para o Horário de Brasília)
  • Brazil/West