连接字符串问题。版本 - 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>";
?>
答案 0 :(得分:1)
这对您来说可能已经超过18个月,但可能会对其他人有所帮助。从Server 2008和PHP 5.3.28迁移到Server 2016和PHP 7.3.7时,我也挣扎了一段时间。两者都在IIS(Server 2016的版本10)下运行PHP。
以下是我使其正常工作所采取的步骤,后面是带有连接字符串的PHP示例:
C:\Program Files\PHP\v7.3\php.ini
,在extension=php_odbc.dll
部分中加入[ExtensionList]
。使用的库是32位,因此它使用32位DSN。C:\Windows\SysWOW64\odbcad32.exe
中所述。SageLine50V24系统DSN的数据路径示例为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;
}