我使用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配置,如果我发现任何事情,我会更新它。谢谢你的帮助
答案 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
可以附加!