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.
