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配置,并且如果我找出任何东西,它会更新它。谢谢你的帮助
答
看起来像是应该工作。但是这个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
可以追加!
我认为粘贴特定的sql可能有帮助 – yakobom
@yakobom感谢您的建议。刚刚添加 –
它将PHP从5.4升级到7.0后可以工作。我仍然不确定它为什么会发生。希望以后我有时间跟踪细节。 谢谢你的帮助 –