Bug #80874 [Opn->Fbk]: odbc_fetch_array() will not fetch a row containing a UTF-8 currency code symbol
| From: | cmb@php.net | Date: | Wed, 17 Mar 2021 16:02:18 +0000 |
| Subject: | Bug #80874 [Opn->Fbk]: odbc_fetch_array() will not fetch a row containing a UTF-8 currency code symbol | ||
| References: | 1 | Groups: | php.bugs |
| Request: | Send a blank email to php-bugs+get-232824@lists.php.net to get a copy of this message | ||
Edit report at https://bugs.php.net/bug.php?id=80874&edit=1
ID: 80874
Updated by: cmb@php.net
Reported by: tony at tonymarston dot net
Summary: odbc_fetch_array() will not fetch a row containing a
UTF-8 currency code symbol
-Status: Open
+Status: Feedback
Type: Bug
Package: ODBC related
Operating System: Windows 10
PHP Version: 7.4.16
-Assigned To:
+Assigned To: cmb
Block user comment: N
Private report: N
New Comment:
> [â¦] but the call to odbc_fetch_array() only returns the first 2
> rows and returns FALSE for the 3rd row.
Doesn't it also raise a warning?
Anyhow, I cannot reproduce this (I haven't a SAP HANA DB
available, though), so please provide an ODBC trace so we can see
what's actually happening. If possible, put it somewhere on the
Web (e.g. gist.github.com, pastebin.com) and only post a link to
the trace here.
Previous Comments:
------------------------------------------------------------------------
[2021-03-16 18:11:38] tony at tonymarston dot net
Description:
------------
I have a database table in a SAP HANA database which contains currency codes and their symbols, but
when I try to read them in my PHP program the rows containing symbols are not returned in the result
set.
Test script:
---------------
CREATE TABLE currency (
currency_code nvarchar(16) NOT NULL,
currency_name nvarchar(255) NOT NULL,
currency_symbol nvarchar(4) DEFAULT NULL,
PRIMARY KEY (currency_code)
);
INSERT INTO currency (currency_code, currency_name, currency_symbol) VALUES ('AUD',
'Australian Dollars', NULL);
INSERT INTO currency (currency_code, currency_name, currency_symbol) VALUES ('CAD',
'Canadian Dollars', NULL);
INSERT INTO currency (currency_code, currency_name, currency_symbol) VALUES ('EUR',
'Euros', 'â¬');
INSERT INTO currency (currency_code, currency_name, currency_symbol) VALUES ('GBP',
'UK Pounds', '£');
INSERT INTO currency (currency_code, currency_name, currency_symbol) VALUES ('JPY',
'Japanese Yen', 'Â¥');
INSERT INTO currency (currency_code, currency_name, currency_symbol) VALUES ('SGD',
'Singapore Dollar', '$');
INSERT INTO currency (currency_code, currency_name, currency_symbol) VALUES ('THB',
'Thai Baht', '฿');
INSERT INTO currency (currency_code, currency_name, currency_symbol) VALUES ('USD',
'US Dollars', '$');
INSERT INTO currency (currency_code, currency_name, currency_symbol) VALUES ('YUAN',
'Chinese Yuan Renminbi', 'å
');
<?php
$driver = 'HDBODBC';
$server = 'hxehost:39015';
$user = '****';
$pswd = '****';
$conn = odbc_connect("Driver=$driver;ServerNode=$server",$user,$pswd) OR
die('Connection to DB via ODBC failed');
$query = "SELECT * FROM test.currency ORDER BY currency_code";
if (!$result = odbc_exec($conn, $query)) {
die("ERRORNO=".odbc_error().", ERRORMSG=".odbc_errormsg());
};
$numrows = odbc_num_rows($result);
while ($row = odbc_fetch_array($result)) {
$array[] = array_change_key_case($row, CASE_LOWER);
echo "<p>id={$row['CURRENCY_CODE']},
name={$row['CURRENCY_NAME']},
symbol={$row['CURRENCY_SYMBOL']}</p>\n";
} // while
odbc_free_result($result);
?>
Expected result:
----------------
The call to odbc_num_rows() returns '9' which is correct, but the call to
odbc_fetch_array() only returns the first 2 rows and returns FALSE for the 3rd row.
------------------------------------------------------------------------
--
Edit this bug report at https://bugs.php.net/bug.php?id=80874&edit=1