MySQLi – Servidor retornou tipo desconhecido 246

Eu tenho trabalhado em um site gerenciado de conteúdo que está funcionando bem no localhost. Acabei de enviar os arquivos para o meu servidor mediatemple … e estou vendo resultados bastante interessantes:

Aviso: mysqli_stmt :: bind_result () [mysqli-stmt.bind-result]: O servidor retornou o tipo desconhecido 246. Provavelmente, sua biblioteca do cliente é incompatível com a versão do servidor que você usa!

Alguém já viu alguma coisa assim antes. Estou completamente perplexo! Funciona muito bem no localhost (MAMP), mas quebra no servidor ao vivo :-(.

Muito obrigado!

   

No MySQL 5.0.3, foi introduzido um novo tipo de campo, para suportar matemática de ponto fixo com mais precisão. Este novo tipo de campo é identificado no protocolo MySQL com um valor numérico 246.

Se você possui um servidor MySQL com 5.0.x ou superior, e você usa NUMERIC ou DECIMAL , é incompatível com o tipo de campo DECIMAL usado no cliente MySQL 4.x.

http://dev.mysql.com/doc/refman/5.0/en/upgrading-from-previous-series.html diz:

Como o servidor MySQL 5.0 possui uma nova implementação do tipo de dados DECIMAL , um problema pode ocorrer se o servidor for usado por clientes mais antigos que ainda estão vinculados às bibliotecas de clientes do MySQL 4.1. Se um cliente usa o protocolo cliente / servidor binário para executar instruções preparadas que geram conjuntos de resultados contendo valores numéricos, um erro será levantado: 'Using unsupported buffer type: 246'

Este erro ocorre porque as bibliotecas de clientes 4.1 não suportam o novo valor de tipo MYSQL_TYPE_NEWDECIMAL adicionado em 5.0. Não há como desativar o novo tipo de dados DECIMAL no lado do servidor. Você pode evitar o problema ao clicar novamente no aplicativo com as bibliotecas do cliente do MySQL 5.0.

Veja também http://bugs.php.net/bug.php?id=35536

Você deve ser capaz de resolver esse problema atualizando sua biblioteca de clientes MySQL em PHP. Ou reconstrua o PHP, ou então simplesmente deixe cair um novo binário do cliente MySQL.

O melhor de tudo seria usar a biblioteca mysqlnd mais nova , o que lhe dá muitos benefícios ao desempenho e à funcionalidade. Essa biblioteca está incluída na distribuição de origem do PHP 5.3 e posterior. Ele afirma na FAQ que requer PHP 5.3, o que realmente me surpreende, mas é o que eles dizem.

Altere o seu tipo DECIMAL para FLOAT no database até que seja suportado.

Deve ser um problema de versão do MySQL.

Isto é o que encontrei em outro fórum:

 apt-get source php5-mysqli cd php5-... ./configure --with-mysqli=/usr/bin/mysql_config --without-mysql make cp ext/mysqli/modules/mysqli.so /usr/lib/php5/... 

Obviamente você provavelmente tem nomes de pastas diferentes, mas espero que você tenha a idéia.