OSDN Git Service

Refering to http://sourceforge.jp/projects/nucleus-jp/lists/archive/developers/2011...
[nucleus-jp/nucleus-jp-ancient.git] / utf8 / nucleus / libs / sql / mysql.php
index 856579f..8ae98b7 100755 (executable)
@@ -70,19 +70,21 @@ if (function_exists('mysql_query') && !function_exists('sql_fetch_assoc'))
 
                $MYSQL_CONN = @mysql_connect($MYSQL_HOST, $MYSQL_USER, $MYSQL_PASSWORD) or startUpError('<p>Could not connect to MySQL database.</p>', 'Connect Error');
                mysql_select_db($MYSQL_DATABASE) or startUpError('<p>Could not select database: ' . mysql_error() . '</p>', 'Connect Error');
-/*
+
 // <add for garble measure>
-               $resource = sql_query("show variables LIKE 'character_set_database'");
-               $fetchDat = sql_fetch_assoc($resource);
-               $charset  = $fetchDat['Value'];
-               $mySqlVer = implode('.', array_map('intval', explode('.', sql_get_server_info($MYSQL_CONN))));
-               if ($mySqlVer >= '5.0.7' && function_exists('mysql_set_charset')) {
-                       mysql_set_charset($charset);
-               } elseif ($mySqlVer >= '4.1.0') {
-                       sql_query("SET CHARACTER SET " . $charset);
+               if (defined(_CHARSET)){
+                       $charset  = _CHARSET;
+               }else{
+                       $resource = sql_query("show variables LIKE 'character_set_database'");
+                       $fetchDat = sql_fetch_assoc($resource);
+                       $charset  = $fetchDat['Value'];
+                       // in trouble of encoding,uncomment the following line.
+                       // $charset = "ujis";
+                       // $charset = "utf8";
                }
-// </add for garble measure>
-*/
+               sql_set_charset_jp($charset);
+// </add for garble measure>*/
+
                return $MYSQL_CONN;
        }
 
@@ -343,15 +345,48 @@ if (function_exists('mysql_query') && !function_exists('sql_fetch_assoc'))
 
 *******************************************************************/
 
-       /**
-         * for JP installer only
-         */
-       function at_sql_query($query, $conn = false) {
-               global $SQLCount,$MYSQL_CONN;
-               if (!$conn) $conn = $MYSQL_CONN;
-               $SQLCount++;
-               $res = mysql_query($query,$conn);
+       /*
+        * for preventing I/O strings from auto-detecting the charactor encodings by MySQL
+        * since 3.62_beta-jp
+        * Jan.20, 2011 by kotorisan and cacher
+        * refering to their conversation below,
+        * http://japan.nucleuscms.org/bb/viewtopic.php?p=26581
+        * 
+        * NOTE:        shift_jis is only supported for output. Using shift_jis in DB is prohibited.
+        * NOTE:        iso-8859-x,windows-125x if _CHARSET is unset.
+        */
+       function sql_set_charset_jp($charset,$mode = NULL) {
+               switch(strtolower($charset)){\r
+                       case 'utf-8':
+                       case 'utf8':\r
+                               $charset = 'utf8';\r
+                               break;\r
+                       case 'euc-jp':
+                       case 'ujis':\r
+                               $charset = 'ujis';\r
+                               break;\r
+                       case 'gb2312':\r
+                               $charset = 'gb2312';\r
+                               break;
+                       /*\r
+                       case 'shift_jis':
+                       case 'sjis':\r
+                               $charset = 'sjis';\r
+                               break;
+                       */\r
+                       default:
+                               $charset = 'latin1';\r
+                               break;\r
+               }
+               $mySqlVer = implode('.', array_map('intval', explode('.', sql_get_server_info())));
+               if (version_compare($mySqlVer, '5.0.7', '>=') && function_exists('mysql_set_charset')) {
+                       $res = mysql_set_charset($charset);
+               } elseif (version_compare($mySqlVer, '4.1.0', '>=')) {
+                       $res = ($mode == 'NAMES')
+                               ?sql_query("SET NAMES " . $charset)
+                               :sql_query("SET CHARACTER SET " . $charset)
+                       ;
+               }
                return $res;
        }
-}
-?>
\ No newline at end of file
+}
\ No newline at end of file