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

时间:2017-10-29 05:24:49

标签: php sql-server odbc sql-server-2016

我使用odbc_exec在我的本地数据库(SQL server 2016)中执行存储过程,并希望将记录作为结果返回。但是,结果的字段名称(odbc_field_name)都是空的。

记录的值是正确的。当我在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配置,如果我发现任何事情,我会更新它。谢谢你的帮助

1 个答案:

答案 0 :(得分: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可以附加!