PHP:odbc_exec查询的字段名称为空

问题描述:

我使用odbc_exec在我的本地数据库(SQL Server 2016)中执行存储过程,并期望将结果作为返回记录。但是,结果的字段名称(odbc_field_name)全部为空。PHP:odbc_exec查询的字段名称为空

记录的值是正确的。当我在SSMS上运行查询时,结果看起来不错。以下是我的示例代码。

PHP:

$connection = odbc_connect("Driver={SQL Server Native Client 11.0};Server=$myServer;Database=$myDB;", $myUser, $myPass) or die("Couldn't connect to SQL Server on $myServer"); 
$query = "dbo.[TestSP]"; 
$result = odbc_exec($connection,$query) or die(odbc_error($connection)); 
$counter = 0; 
while($counter < odbc_num_fields($result)) 
{ 
    $counter = $counter + 1; 
    $test_str.= odbc_field_name($result,$counter)."\n"; 
} 
$file = 'log.txt'; 
$current = file_get_contents($file); 
$current .= $test_str; 
file_put_contents($file, $current); 

SQL:

CREATE PROC [dbo].[TestSP] AS 
BEGIN 
    SET NOCOUNT ON; 
    SELECT '1' as first_column, '2' as second_column 
END 

任何建议可以理解的升级PHP 5.4〜7.0后

更新

它的工作原理。仍然不知道为什么会发生......我将在稍后比较php配置,并且如果我找出任何东西,它会更新它。谢谢你的帮助

+0

我认为粘贴特定的sql可能有帮助 – yakobom

+0

@yakobom感谢您的建议。刚刚添加 –

+0

它将PHP从5.4升级到7.0后可以工作。我仍然不确定它为什么会发生。希望以后我有时间跟踪细节。 谢谢你的帮助 –

看起来像是应该工作。但是这个ODBC代码在这一点上是相当古老的,并且可能很脆弱。如果你不能切换到PDO,也许尝试检索一个关联数组? (这有可能是司机只是没有得到这些信息虽然)。

$connection = odbc_connect("Driver={SQL Server Native Client 11.0};Server=$myServer;Database=$myDB;", $myUser, $myPass) or die("Couldn't connect to SQL Server on $myServer"); 
$query = "dbo.[TestSP]"; 
$result = odbc_exec($connection, $query) or die(odbc_error($connection)); 
$row = odbc_fetch_array($result); 
odbc_free_result($result); 

foreach ($row as $k=>$v) 
{ 
    $test_str.= "$k\n"; 
} 
$file = 'log.txt'; 
file_put_contents($file, $test_str, FILE_APPEND); 

还要注意file_put_contents可以追加!