Я работаю в компании, которая купила DBA Manufacturing, и мне нужно извлечь некоторые значения из базы данных Pervasive SQL 2000i. К сожалению, нет никаких планов по обновлению БД, поэтому я должен сделать из-за того, что у меня есть. Я бегу 32 бит
Я смог сделать odbc_connect
вызов в PHP к DSN на машине с Windows. Я использую PHP на Windows с NGINX.
<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��
Я взволнован и потрясен тем, что зашел так далеко! Исключительно быстро можно извлекать значения из Pervasive через соединение ODBC, и я чувствую, что очень близок к успеху. Мне просто нужно подтолкнуть в правильном направлении.
Все, что я пробовал до сих пор: я попытался установить внутреннюю кодировку страницы для нескольких различных наборов символов, включая UTF-8, Windows, ASCII и т. Д. Я также попытался установить флажок в параметрах настройки драйвера ODBC во время DSN Настройка в Windows с надписью «Использовать преобразование OEM / ANSI». Это только изменяет персонажей.
Другой ключ к этому заключается в том, что по какой-то причине, когда я вызываю строку подключения, используя System.Data.odbc
в C # он возвращает запрос и текстовые значения полностью.
Я пытался использовать iconv
преобразовать значения в UTF-8 и т. д. безрезультатно. Я пытался заставить заголовок отображать страницу в разных наборах символов. я пытался mb_detect_encoding()
на odbc_result()
и возвращаемое значение говорит UTF-8, но я предполагаю, что это должно быть. Должен быть кто-то, кто знает, как это исправить. Пожалуйста, кто-нибудь укажет мне правильное направление? Буду вечно благодарен!
Если что-то еще нужно будет добавить, чтобы решить эту проблему, я включу это по запросу. Спасибо!
Задача ещё не решена.
Других решений пока нет …