ODBC, MSSQL, FreeTDS внутреннее объединение не возвращает данные из второй таблицы

У меня FreeTDS установлен на сервере Ubuntu 14.04. Я подключаюсь к базе данных MSSQL следующим образом:

$db = new PDO('odbc:Driver=FreeTDS; Server=<IP Address>; Port=1433; Database=db_name; UID=user; PWD=password;');

Я выполняю следующий запрос:

SELECT c.*, ct.*
FROM Committee AS c
INNER JOIN CommitteeType as ct on c.CommitteeTypeID=ct.CommitteeTypeID
WHERE CommitteeID=$committee_id

Тогда я бегу:

$statement = $db->prepare($query);
$statement->execute();
$result = $statement->fetchAll(PDO::FETCH_NAMED);

Результирующий массив очень похож на ожидаемый, за исключением того, что все значения из таблицы CommitteeType пусты. Когда я выполняю точно такой же запрос в базе данных Navicat, я получаю значения для всего из второй таблицы.

Что-то глючит в этом драйвере?

Я пробовал много вариантов синтаксиса запроса без каких-либо различий в выводе. Похоже, что я никогда не смогу получить значения из внутренней объединенной таблицы, независимо от того, какие таблицы я запрашиваю.

Кто-нибудь видит что-то, чего мне не хватает или испытал что-то подобное?

2

Решение

Так что оказывается, есть проблемы с odbc. Теперь я успешно использую dblib.

Вот полный рецепт для любого, кто хочет получить это и запустить:

Это были оригинальные указания, которым я следовал

  1. Установите пакеты freetds-bin, freetds-common, tdsodbc, odbcinst, php5-odbc и unixodbc. Это обеспечивает библиотеки, которые вам нужны.
  2. Скопируйте содержимое /usr/share/doc/freetds-common/examples/odbcinst.ini в /etc/odbcinst.ini. Это регистрирует драйвер FreeTDS со слоем ODBC.
  3. Перезапустите ваш веб-сервер, чтобы загрузить модуль ODBC в PHP.

Затем связано с:

<?php
try
{
$db = new PDO('odbc:Driver=FreeTDS; Server=hostname_or_ip; Port=port; Database=database_name; UID=username; PWD=password;');
}
catch(PDOException $exception)
{
die("Unable to open database.<br />Error message:<br /><br />$exception.");
}
echo '<h1>Successfully connected!</h1>';
$query = 'SELECT * FROM table_name';
$statement = $db->prepare($query);
$statement->execute();
$result = $statement->fetchAll(PDO::FETCH_ASSOC);
?>

Чтобы исправить проблему, я установил:

php5-sybase (т.е. sudo apt-get install php5-sybase)

Затем подключается так:

<?php
try {
$hostname = "myhost";
$port = 10060;
$dbname = "tempdb";
$username = "dbuser";
$pw = "password";
$db = new PDO ("dblib:host=$hostname:$port;dbname=$dbname","$username","$pw");
}
catch(PDOException $exception)
{
die("Unable to open database.<br />Error message:<br /><br />$exception.");
}
echo '<h1>Successfully connected!</h1>';
$query = 'SELECT * FROM table_name';
$statement = $db->prepare($query);
$statement->execute();
$result = $statement->fetchAll(PDO::FETCH_ASSOC);
?>
0

Другие решения

Других решений пока нет …