«

»

dez 18

Problema de encoding no Zend_Db

Estava eu programando alegre e contente a minha Stored Procedure. Testei e testei a minha SP no MySQL Query Browser, ela estava perfeita. Então já era a hora de coloca-la no meu código.
Quando executo-a, o Zend Framework me mostra o seguinte erro:


Fatal error: Uncaught exception 'PDOException' with message 'SQLSTATE[42S22]: Column not found: 1054 Unknown column 'a.Código' in 'where clause'' in /xxx/xxx/xxx/sp.php:37

Infelizmente ainda encontramos banco de dados aonde novatos DBAS colocam nomes de campo com acento, espaço e todos os caracteres possíveis que possam causar problemas futuros.

Então resolvo entrar no canal do IRC #zftalk na freenode.net, e faço a pergunta se alguém já pode me ajudar e recebo a resposta rtfm (read the fuck manual), então vamos ao manual.

Praticando o rtfm, encontro a resposta em http://br.php.net/manual/pt_BR/ref.pdo.php#68103

E resolvo meu problema colocando :

$db->exec('SET CHARACTER SET utf8');

antes de chamar a minha SP.

Tabela:

CREATE TABLE test(
    `código` INT,
    nome VCHAR(30)
);


Stored Procedure:

DELIMITER $$

DROP PROCEDURE IF EXISTS `dct`.`sp_test`$$
CREATE DEFINER=`test`@`localhost` PROCEDURE `sp_test`(
)
BEGIN

    SELECT `código`,nome WHERE `código` = 1;

END$$

DELIMITER ;


Código ZF:

$db->query('SET CHARACTER SET utf8');
$result = $db->query("CALL sp_test()");
$result = $result->fetchAll();
var_dump($result);

Espero ter ajudado alguém com isso.

1 comentário

  1. Diogo

    Como coloco o $db->query(‘SET CHARACTER SET utf8′);
    no BootStrap? Qual metodo _ini seria pra Zend_Db_Table_Abstract ?

Deixe um Comentário

Seu e-mail não será publicado.

Você pode usar estas tags e atributos HTML: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>