domingo, 30 de dezembro de 2007

ADOdb, Store procedures em MySQL e problemas.

Outro dia, deparei-me com alguns problemas ao utilizar o ADOdb. Criei algumas stored procedures (sp's) no banco de dados (MySQL) e ao chamá-las através do ADOdb, algumas mensagens de erro eram retornadas.

A primeira delas retornava a seguinte mensagem de erro:

Procedure mySP can't return a result set in the given context.

Referia-se a CLIENT_MULTI_RESULTS estar desabilitada. Como a sp executa comandos e estes produzem mais de uma saída na tela, o ADOdb trata-os como sendo mais de um RecordSet. Após algum tempo pesquisando, encontrei a maneira correta de fazê-la:

$flags = 131074;
$dsn = "mysql://user:$pwd@localhost/mydb?persist&clientflags=$flags";
$conn = ADONewConnection($dsn);

Em seguida veio outra mensagem:
Commands out of sync

Esta refere-se à execução da SP. Para resolver, configure a variável global $ADODB_COUNTRECS para FALSE.

Há duas maneiras para resolver.

1. No caso de apenas o primeiro grupo de registros interessar a você, você pode descartá-los usando o método Close() da conexão (esta não é a maneira mais elegante mas resolve).

2. Chamar o método NextRecordSet() para recuperar o próximo conjunto de resultados e dar o devido tratamento ao próximo grupo de registros.

Estas foram as principais dificuldades que encontrei até agora ao utilizar sp's junto ao MySQL com o ADOdb. Alguém mais tem alguma situação com outro SGBD utilizando o ADOdb que queira compartilhar conosco?

Nenhum comentário: