私は DBA Manufacturing を買収した会社で働いており、Pervasive SQL 2000i DB からいくつかの値を取得する必要があります。残念ながら、DB をアップグレードする予定はありません。私は32ビットを実行しています
odbc_connectPHP で Windows マシンの DSN を呼び出すことができました。NGINXを使用してWindowsでPHPを実行しています。
<html>
<head>
<title>
Placeholder Title
</title>
</head>
<body>
<?php
// mb_internal_encoding("UTF-8");
// connect to the dbamfg DSN
$connect=odbc_connect("Driver={Pervasive ODBC Client Interface};ServerName=dbamfg.1583;ServerDSN=dbadefault;","","");
// query the users table for name and surname
$query = "select * from BKARINVL where BKAR_INVL_INVNM = 600100 order by bkar_invl_cntr ";
//Prepare the statement
$result = odbc_prepare ($connect, $query);
// execute the query
odbc_execute($result);
// fetch the data from the database
while(odbc_fetch_row($result)){
$SalesOrder = odbc_result($result, 1);
$InvLine = odbc_result($result, 2);
$EstShpDt = odbc_result($result, 3);
$ProdCode = odbc_result($result, 4);
$ProdDesc = odbc_result($result, 5);
echo ('<br />'.$InvLine.'<br />');
echo ($SalesOrder.'<br />');
echo ($EstShpDt.'<br />');
echo ($ProdCode.'<br />');
echo ($ProdDesc.'<br />');
}
// closing the connection
odbc_close($connect);
?>
</body>
</html>
クエリは問題なく数値を返します。テキスト列に関しては、10 文字が返され、その後、正しく表示されていない文字が表示されます。
以下に例を示します。
1
600100
2015-05-31
020-0015-1
DIGITAL VI!2S��
2
600100
2015-05-31
020-0012-0
2 X 4 AUDI!5S��
3
600100
2015-05-31
020-0065-0
16-CKT LOW!8S��
ここまで来れたことに興奮とショック!ODBC 接続を介して Pervasive から値を取得するのは非常に高速で、成功に近づいているように感じます。正しい方向へのプッシュが必要です。
これまでに試したことはすべて: ページの内部エンコードを、UTF-8、Windows、ASCII など、いくつかの異なる文字セットに設定しようとしました。また、DSN 中に ODBC ドライバーのセットアップ オプションの下にあるチェックボックスを選択しようとしました。 「OEM/ANSI 変換を使用する」と表示されます。これは、文字を少し変更するだけです。
これに対するもう 1 つの手がかりは、何らかの理由System.Data.odbcで C# を使用して接続文字列を呼び出すと、クエリとテキスト値が完全に返されることです。
iconv値をUTF-8などに変換するために使用しようとしましたが、役に立ちませんでした。ヘッダーにページを異なる文字セットで表示するように強制しようとしました。私は試してみmb_detect_encoding()ましたがodbc_result()、戻り値はUTF-8になっていますが、これを修正する方法を知っている人がいるはずです。お願いします、誰かが私を正しい方向に向けてくれますか? 私は永遠に感謝します!
これを解決するためにさらに何か追加する必要がある場合は、要求されたときにそれを含めます。ありがとうございました!