1

我正在为一家购买 DBA Manufacturing 的公司工作,我需要从 Pervasive SQL 2000i DB 中检索一些值。不幸的是,没有升级数据库的计划,所以我必须尽我所能。我正在运行 32 位

我能够odbc_connect在 Windows 机器上用 PHP 调用 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 驱动程序设置选项下的复选框在 Windows 中设置,显示“使用 OEM/ANSI 转换”。这只会稍微改变字符。

另一个线索是,由于某种原因,当我System.Data.odbc在 C# 中调用连接字符串时,它会完整返回查询和文本值。

我曾尝试使用iconv将值转换为 UTF-8 等,但无济于事。我尝试强制标题以不同的字符集显示页面。我已经尝试过mb_detect_encoding()odbc_result()返回值显示为 UTF-8,但我认为它必须这样做必须有人知道如何解决这个问题。请,有人会指出我正确的方向吗?我将永远感激不尽!

如果需要添加更多内容来解决此问题,我会在需要时将其包含在内。谢谢!

4

0 回答 0