Sage 50 ODBC on 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>";
?>

这对您来说可能已经超过 18 个月了,但可能会帮助其他人。从Server 2008和PHP 5.3.28迁移到Server 2016和PHP 7.3.7时,我也挣扎了一段时间。两者都在IIS(Server 2016上的版本10(下运行PHP。

以下是我为使其工作而采取的步骤,然后是带有连接字符串的 PHP 示例:

  • 在服务器上安装 Sage v24。您可能只需进行服务器安装即可获得ODBC驱动程序和DSN,但我安装了完整的应用程序。
  • 检查 ODBC 驱动程序扩展是否已添加到 PHP 配置中,因为默认情况下它不包含在 PHP 7 中。 例如,编辑C:Program FilesPHPv7.3php.ini以在[ExtensionList]部分中包含extension=php_odbc.dll。使用的库是 32 位,因此它使用 32 位 DSN。
  • 更新DSN(32位版本(以指向正确的Sage数据位置。为此,您需要使用 32 位版本的 ODBC 数据源管理器(如C:WindowsSysWOW64odbcad32.exe中找到的。SageLine50V24系统DSN的数据路径示例V:SageData2018accdata
  • 在 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;
}

最新更新