bug60616.phpt 2.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576
  1. --TEST--
  2. odbc_exec(): Getting accurate unicode data from query
  3. --EXTENSIONS--
  4. odbc
  5. --SKIPIF--
  6. <?php include 'skipif.inc'; ?>
  7. <?php
  8. if ("unixODBC" != ODBC_TYPE) {
  9. die("skip ODBC_TYPE != unixODBC");
  10. }
  11. ?>
  12. --FILE--
  13. <?php
  14. // Test strings
  15. mb_internal_encoding("EUC_JP");
  16. $euc_jp_base64 = 'pdal6aWkpcCl676uyqo=';
  17. $euc_jp = base64_decode($euc_jp_base64);
  18. $ascii = 'abcdefghijklmnopqrstuvwxyz;]=#0123456789';
  19. include 'config.inc';
  20. ini_set("odbc.defaultlrl", 4); // Set artificially low
  21. $conn = odbc_connect($dsn, $user, $pass);
  22. odbc_exec($conn, 'CREATE DATABASE odbcTEST ENCODING=\'EUC_JP\'');
  23. odbc_exec($conn, 'CREATE TABLE FOO (ID INT, CHAR_COL CHAR(200), VARCHAR_COL VARCHAR(200), TEXT_COL TEXT)');
  24. odbc_exec($conn, "INSERT INTO FOO(ID, CHAR_COL, VARCHAR_COL, TEXT_COL) VALUES (1, '$euc_jp', '$euc_jp', '$euc_jp')");
  25. odbc_exec($conn, "INSERT INTO FOO(ID, CHAR_COL, VARCHAR_COL, TEXT_COL) VALUES (2, '$ascii', '$ascii', '$ascii')");
  26. $res = odbc_exec($conn, 'SELECT * FROM FOO ORDER BY ID ASC');
  27. while(odbc_fetch_row($res)) {
  28. $char_col = odbc_result($res, "CHAR_COL");
  29. $varchar_col = odbc_result($res, "VARCHAR_COL");
  30. $id = odbc_result($res, "ID");
  31. $text_col = "";
  32. while (($chunk=odbc_result($res, "TEXT_COL")) !== false) {
  33. $text_col .= $chunk;
  34. }
  35. if ($id == 1) {
  36. $euc_jp_check = $euc_jp . str_repeat(" ", (200 - mb_strlen($euc_jp)));
  37. if (strcmp($char_col, $euc_jp_check) == 0 && strcmp($varchar_col, $euc_jp) == 0 &&
  38. strcmp($text_col, $euc_jp) == 0) {
  39. print "EUC-JP matched\n";
  40. } else {
  41. print "EUC-JP mismatched\n";
  42. }
  43. } else {
  44. $ascii_check = $ascii . str_repeat(" ", (200 - strlen($ascii)));
  45. if (strcmp($char_col, $ascii_check) == 0 && strcmp($varchar_col, $ascii) == 0 &&
  46. strcmp($text_col, $ascii) == 0) {
  47. print "ASCII matched\n";
  48. } else {
  49. print "ASCII mismatched\n";
  50. }
  51. }
  52. }
  53. ?>
  54. --EXPECT--
  55. EUC-JP matched
  56. ASCII matched
  57. --CLEAN--
  58. <?php
  59. include 'config.inc';
  60. $conn = odbc_connect($dsn, $user, $pass);
  61. odbc_exec($conn, 'DROP TABLE FOO');
  62. odbc_exec($conn, 'DROP DATABASE odbcTEST');
  63. ?>