Проблемы со строкой подключения. Версии - Sage Line 50v24, PHP 7.2.2, Windows Server 2012 R2 64 бит.
Извините, если я что-то пропустил - спрашивайте о недостающей информации в комментариях. Я провел часы, часы и часы, исследуя это и пробуя разные вещи. Спасибо! :-)
<?php
$user = "myuser";
$pass = "mypass";
$connstring = "Driver = {SageLine50v24};Server=localhost;Database=\\\server1\\uncpath\\companyname\\accdata\\";
echo $connstring;
$conn=odbc_connect($connstring,$user,$pass);
$sql = "SELECT * FROM SALES_LEDGER";
$rs=odbc_exec($conn,$sql);
var_dump($rs);
odbc_close($conn);
?>
Я считаю, что драйвер ODBC настроен нормально, потому что он работает через Excel.
Я много гуглил и прочитал, вероятно, все вопросы SO по этому поводу. Это указывает на такие вещи, как последняя обратная косая черта после ACCDATA, которая является критической в PHP (хотя драйверу ODBC она не нужна в Excel или других программах;)
Варианты приведенного выше кода, которые я пробовал, включают;
Другой вариант кода, который я пробовал, однако отчет об ошибке не дал никаких ответов;
<?php
error_reporting(E_ALL);
echo "<html>";
echo "<body>";
$user = "myuser";
$pass = "mypass";
$connstring = "'Driver = {SageLine50v24};Server=localhost;Database=\\\server1\\uncpath\\companyname\\accdata\\'";
echo $connstring;
$conn=odbc_connect($connstring,$user,$pass);
echo odbc_error($conn);
if (!$conn){exit("Connection Failed: " . $conn);}
$sql = "SELECT * FROM SALES_LEDGER";
$rs=odbc_exec($conn,$sql);
var_dump($rs);
if (!$rs){exit("Error in SQL");}
echo "<table><tr>";
echo "<th>account</th>";
echo "<th>name</th></tr>";
while (odbc_fetch_row($rs))
{
$account=odbc_result($rs,"account_ref");
$coname=odbc_result($rs,"name");
echo "<tr><td>$account</td>";
echo "<td>$coname</td></tr>";
}
odbc_close($conn);
echo "</table>";
echo "</body>";
echo "</html>";
?>
Кроме того, возможно, вы искали в Google поисковый запрос Строка подключения sage50 odbc?
@KenWhite У меня нет сообщений об ошибках, извините. В моем коде чего-то не хватает, что предотвращает отображение сообщений об ошибках? Если бы у меня были какие-то, я бы, конечно, исследовал их специально и разместил их здесь.
@KenWhite Я погуглил, что да, в основном есть результаты, касающиеся excel и доступа к odbc, который все равно работает. Специально исследовал строку php, не так много охватывал ее, пробовал такие вещи, как script на expert-exchange.com/questions/26454364/…, но ничего хорошего
@KenWhite, это лучше для названия? Спасибо за вашу помощь
Подключение через ODBC - это подключение через ODBC, независимо от того, какой язык вы используете (в этом суть использования ODBC). Строка подключения может потребовать незначительных изменений (например, экранирования символов обратной косой черты), но она работает со всеми из них. Если у вас есть строка подключения, которая правильно работает через Excel, проблема, скорее всего, в другом месте. Что касается редактирования заголовка: теги полностью избыточны и не должны быть в заголовке (информация находится в тегах). Итак, если бы вы увидели, что синтаксис строки подключения ищет здесь сейчас среди длинного списка результатов поиска, поможет ли это вам?






Возможно, для вас это слишком поздно, более чем на 18 месяцев, но может помочь кому-то другому. Я тоже некоторое время боролся при переходе с Server 2008 и PHP 5.3.28 на Server 2016 и PHP 7.3.7. Оба использовали PHP под IIS (версия 10 на сервере 2016).
Ниже приведены шаги, которые я предпринял, чтобы заставить его работать, а также пример PHP со строкой подключения:
C:\Program Files\PHP\v7.3\php.ini, чтобы включить extension=php_odbc.dll в раздел [ExtensionList]. Используемая библиотека является 32-битной, поэтому в ней используется 32-битный DSN.C:\Windows\SysWOW64\odbcad32.exe. Примером пути к данным для системного DSN SageLine50V24 является V:\SageData\2018\accdata.Тогда PHP выглядит так:
function sage_connect(){
$uid = "username";
$pwd = "password";
if (($rConn = odbc_connect("DSN=SageLine50v24;uid=$uid;pwd=$pwd", $uid, $pwd)) === false) {
die('Unable to connect to the Sage Line 50 V24 ODBC datasource.');
}
return $rConn;
}
Выглядит очень полезным, спасибо :-) но мы отошли от sage, не имея возможности комментировать дальше ...
Пожалуйста, перефразируйте заголовок вашего вопроса на что-нибудь значимое. Ваш текущий заголовок просто дублирует информацию тега и добавляет слова проблемы на сервере WIndows, которые не предоставляют никакой полезной информации. Ваш заголовок должен быть достаточно ясным, чтобы объяснить конкретную проблему или вопрос таким образом, чтобы будущий пользователь увидел его в списке результатов поиска. Также было бы полезно, если бы вы включили информацию о любых сообщениях об ошибках, которые вы получаете. Спасибо.