代码之家  ›  专栏  ›  技术社区  ›  Biff MaGriff

php/json我的字段名被截断为30个字符。我能停下来吗?

  •  0
  • Biff MaGriff  · 技术社区  · 16 年前

    好吧,我得到了一个供应商软件,他们说应该在ApachePHP服务器和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).'}';
    

    我的结果是这样的(用小提琴2捕捉)

    “results”:[“key_field”:“57”,“my30characterlongfieldthatiscu”:“goodvalue”]

    “my30characterLongFieldThatisCu”应为“my30characterLongFieldThatisAutoff”

    有点奇怪,不是吗?

    供应商声称这个应用程序在他们的终端上工作得很好。

    我认为这是某种类型的IIsPHP限制,有没有办法绕过它,或者我可以扩展它?

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

    谢谢!

    2 回复  |  直到 16 年前
        1
  •  1
  •   ThiefMaster    16 年前

    见 http://bugs.php.net/bug.php?id=33060 -这就是引起你问题的原因。

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

        2
  •  1
  •   VolkerK    16 年前

    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,而是一个选项?