Я использую 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 позже и обновлю это, если я идентифицирую что-нибудь. Спасибо всем за помощь
Это выглядит так должен Работа. Но этот код 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
могу добавить!
Других решений пока нет …