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.

Я много гуглил и читал, наверное, все вопросы об этом. Это указывало на то, что финальная обратная косая черта после 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>";
?>

0 ответов

Возможно, для вас это слишком поздно, более чем на 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;
}
Другие вопросы по тегам