MySQLi - 服务器返回未知类型246

时间:2009-11-23 22:58:04

标签: php mysqli

我一直在开发一个在localhost上工作正常的内容管理网站。我刚刚将文件上传到我的mediatemple服务器..我看到了一些非常有趣的结果:

警告:mysqli_stmt :: bind_result()[mysqli-stmt.bind-result]:服务器返回未知类型246.可能您的客户端库与您使用的服务器版本不兼容!

之前有没有人见过这样的事情。我完全难过了!在localhost(MAMP)上工作得很好,但在实时服务器上中断: - (。

非常感谢!

3 个答案:

答案 0 :(得分:1)

在MySQL 5.0.3中,引入了一种新的字段类型,以更准确地支持定点数学运算。这个新的字段类型在MySQL协议中用数值246标识。

如果您的MySQL服务器运行5.0.x或更高版本,而您使用的是NUMERICDECIMAL,则它与MySQL 4.x中使用的DECIMAL字段类型不兼容客户端。

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

  

由于MySQL 5.0服务器具有DECIMAL数据类型的新实现,如果服务器由仍与MySQL 4.1客户端库链接的旧客户端使用,则可能会出现问题。如果客户端使用二进制客户端/服务器协议来执行生成包含数值的结果集的预准备语句,则会引发错误:'Using unsupported buffer type: 246'

     

发生此错误是因为4.1客户端库不支持5.0中添加的新MYSQL_TYPE_NEWDECIMAL类型值。无法在服务器端禁用新的DECIMAL数据类型。您可以通过使用MySQL 5.0中的客户端库重新链接应用程序来避免此问题。

另见http://bugs.php.net/bug.php?id=35536

您应该可以通过在PHP中升级MySQL客户端库来解决此问题。要么重建PHP,要么只是放入一个新的MySQL客户端二进制文件。

最重要的是使用较新的 mysqlnd 库,这会为您带来很多性能和功能方面的好处。该库包含在PHP 5.3及更高版本的源代码发行版中。它在FAQ中说明它需要 PHP 5.3,这实际上让我感到惊讶,但这就是他们所说的。

答案 1 :(得分:1)

将数据库中的DECIMAL类型更改为FLOAT,直到支持它为止。

答案 2 :(得分:0)

应该是MySQL版本问题。

这是我在另一个论坛中发现的:

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/...

显然你可能有不同的文件夹名称,但我希望你明白这个想法。