bug60616.phpt 2.0 KB

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