好的,所以我得到了这个供应商软件,他们说应该在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 但我不明白。
谢谢!
答案 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个字符听起来过长。