PHP / json我的字段名被截断为30个字符。我可以阻止这个吗?

时间:2010-05-14 20:38:32

标签: php sql-server json

好的,所以我得到了这个供应商软件,他们说应该在apache php服务器和MySql数据库上运行。

我没有其中任何一个,所以我把它放在PHP IIS服务器上,我将代码转换为在SQL服务器上工作。

离。
mysql_select_db - > mssql_select_db
(除其他外)

所以我在php文件中有以下代码

$query = "SELECT * FROM TableName WHERE KEY_FIELD = '".$keyField."';";

$result = mssql_query($query); 

$arr = array();
while ( $obj = mssql_fetch_object($result) ) 
{
    $arr[] = $obj;  
}

echo '{"results":'.json_encode($arr).'}';

我的结果看起来像这样(用fiddler 2捕获)

  

{“results”:[{“KEY_FIELD”:“57”,“My30characterlongfieldthatiscu”:“GoodValue”}}}

“My30characterlongfieldthatiscu”应为“My30characterlongfieldthatiscutoff”

有点奇怪,不是吗?

该供应商声称该应用程序可以完美地运行。

我认为这是某种IIS PHP限制,是否有解决方法或者我可以扩展它?

我找到了这个解决方案 http://www.php.net/manual/en/ref.mssql.php#74834 但我不明白。

谢谢!

2 个答案:

答案 0 :(得分:1)

http://docs.php.net/manual/en/mssql.requirements说:

注意:在Windows上,使用Microsoft的DBLIB。返回列名的函数基于DBLIB中的dbcolname()函数。 DBLIB是为SQL Server 6.x开发的,其中最大标识符长度为30.因此,最大列长度为30个字符。在使用FreeTDS的平台上(Linux),这不是问题。

使用sqlsrv extension代替mssql选项吗?

答案 1 :(得分:1)

请参阅http://bugs.php.net/bug.php?id=33060 - 这就是导致您出现问题的原因。

您可能还需要考虑更改列名称 - 超过30个字符听起来过长。