接続文字列の問題。バージョン - 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 や他のプログラムでは必要ありません;)。
私が試した上記のコードのバリアントには次のものがあります。
- UNC パスではなくデータベースのローカル パス
- スペースの有無にかかわらずドライバー名
- 逆コンマがある場合とない場合のサーバーとデータベース
私が試したコードの別の変種ですが、エラー報告は何の回答も返しませんでした。
<?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>";
?>