У меня 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, я получаю значения для всего из второй таблицы.
Что-то глючит в этом драйвере?
Я пробовал много вариантов синтаксиса запроса без каких-либо различий в выводе. Похоже, что я никогда не смогу получить значения из внутренней объединенной таблицы, независимо от того, какие таблицы я запрашиваю.
Кто-нибудь видит что-то, чего мне не хватает или испытал что-то подобное?
Так что оказывается, есть проблемы с odbc. Теперь я успешно использую dblib.
Вот полный рецепт для любого, кто хочет получить это и запустить:
Это были оригинальные указания, которым я следовал
Затем связано с:
<?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);
?>
Других решений пока нет …