Sage 50 ODBC в синтаксисе строки подключения PHP

Проблемы со строкой подключения. Версии - 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 или других программах;)

Варианты приведенного выше кода, которые я пробовал, включают;

  1. Локальный путь к базе данных вместо UNC-пути
  2. Имя драйвера с пробелами и без них
  3. Сервер и база данных с кавычками и без них

Другой вариант кода, который я пробовал, однако отчет об ошибке не дал никаких ответов;

<?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>";
?>

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

Ken White 18.05.2018 01:55

Кроме того, возможно, вы искали в Google поисковый запрос Строка подключения sage50 odbc?

Ken White 18.05.2018 02:01

@KenWhite У меня нет сообщений об ошибках, извините. В моем коде чего-то не хватает, что предотвращает отображение сообщений об ошибках? Если бы у меня были какие-то, я бы, конечно, исследовал их специально и разместил их здесь.

Lyndon Penson 18.05.2018 02:11

@KenWhite Я погуглил, что да, в основном есть результаты, касающиеся excel и доступа к odbc, который все равно работает. Специально исследовал строку php, не так много охватывал ее, пробовал такие вещи, как script на expert-exchange.com/questions/26454364/…, но ничего хорошего

Lyndon Penson 18.05.2018 02:17

@KenWhite, это лучше для названия? Спасибо за вашу помощь

Lyndon Penson 18.05.2018 02:18

Подключение через ODBC - это подключение через ODBC, независимо от того, какой язык вы используете (в этом суть использования ODBC). Строка подключения может потребовать незначительных изменений (например, экранирования символов обратной косой черты), но она работает со всеми из них. Если у вас есть строка подключения, которая правильно работает через Excel, проблема, скорее всего, в другом месте. Что касается редактирования заголовка: теги полностью избыточны и не должны быть в заголовке (информация находится в тегах). Итак, если бы вы увидели, что синтаксис строки подключения ищет здесь сейчас среди длинного списка результатов поиска, поможет ли это вам?

Ken White 18.05.2018 02:20
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
0
6
627
1

Ответы 1

Возможно, для вас это слишком поздно, более чем на 18 месяцев, но может помочь кому-то другому. Я тоже некоторое время боролся при переходе с Server 2008 и PHP 5.3.28 на Server 2016 и PHP 7.3.7. Оба использовали PHP под IIS (версия 10 на сервере 2016).

Ниже приведены шаги, которые я предпринял, чтобы заставить его работать, а также пример PHP со строкой подключения:

  • Установите Sage v24 на сервер. Вы, вероятно, сможете обойтись без установки только сервера, чтобы получить драйвер ODBC и DSN, но я установил полное приложение.
  • Убедитесь, что расширение драйвера ODBC было добавлено в конфигурацию PHP, поскольку оно не включено по умолчанию в PHP 7., например. отредактируйте C:\Program Files\PHP\v7.3\php.ini, чтобы включить extension=php_odbc.dll в раздел [ExtensionList]. Используемая библиотека является 32-битной, поэтому в ней используется 32-битный DSN.
  • Обновите DSN (32-разрядная версия), чтобы он указывал на правильное расположение данных Sage. Для этого необходимо использовать 32-разрядную версию администратора источника данных ODBC (как указано в C:\Windows\SysWOW64\odbcad32.exe. Примером пути к данным для системного DSN SageLine50V24 является V:\SageData\2018\accdata.
  • Переработайте пул приложений для своего веб-сайта в IIS. Не знаю, действительно ли это необходимо, но это случилось на пути к решению моей проблемы.

Тогда 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, не имея возможности комментировать дальше ...

Lyndon Penson 24.12.2019 06:52

Другие вопросы по теме