文字化け対処 – 1.2系
※ZOX(Zencart On Xoops)では執筆時、1.2系、1.3系ともに修正が必要だったが、最新版のZenCart日本語版(v1.3.0.2-l10n-jp-2)はこの問題は解決されているようだ。
スポンサードリンク
/includes/classes/db/mysql/query_factory.php
<?php // // +----------------------------------------------------------------------+ // |zen-cart Open Source E-commerce | // +----------------------------------------------------------------------+ // | Copyright (c) 2003 The zen-cart developers | // | | // | <a href="http://www.zen-cart.com/index.php">http://www.zen-cart.com/index.php</a> | // | | // | Portions Copyright (c) 2003 osCommerce | // +----------------------------------------------------------------------+ // | This source file is subject to version 2.0 of the GPL license, | // | that is bundled with this package in the file LICENSE, and is | // | available through the world-wide-web at the following url: | // | <a href="http://www.zen-cart.com/license/2_0.txt">http://www.zen-cart.com/license/2_0.txt</a>. | // | If you did not receive a copy of the zen-cart license and are unable | // | to obtain it through the world-wide-web, please send a note to | // | <a href="mailto:[email protected]">[email protected]</a> so we can mail you a copy immediately. | // +----------------------------------------------------------------------+ // $Id: query_factory.php,v 1.2 2006/01/22 02:56:23 shida Exp $ // class queryFactory { function queryFactory() { $this->count_queries = 0; $this->total_query_time = 0; } function connect($zf_host, $zf_user, $zf_password, $zf_database, $zf_pconnect=false, $zp_real=false) { <a>//@TODO</a> error class required to virtualise & centralise all error reporting/logging/debugging $this->database = $zf_database; if ($zf_pconnect == 'false') { $this->link = @mysql_connect($zf_host, $zf_user, $zf_password); } else { $this->link = @mysql_pconnect($zf_host, $zf_user, $zf_password); } mysql_query("SET NAMES ujis"); if ($this->link) { if (@mysql_select_db($zf_database, $this->link)) { $this->db_connected = true; return true; } else { $this->set_error(mysql_errno(),mysql_error(), $zp_real); return false; } } else { $this->set_error(mysql_errno(),mysql_error(), $zp_real); return false; } } function selectdb($database) { @mysql_select_db($zf_database, $this->link); } function prepare_input($zp_string) { if (function_exists('mysql_real_escape_string')) { return mysql_real_escape_string($zp_string); } elseif (function_exists('mysql_escape_string')) { return mysql_escape_string($zp_string); } else { return addslashes($zp_string); } } function close() { @mysql_close($this->link); } function set_error($zp_err_num, $zp_err_text, $zp_fatal = true) { $this->error_number = $zp_err_num; $this->error_text = $zp_err_text; if ($zp_fatal) { $this->show_error(); die(); } } function show_error() { echo $this->error_number . ' ' . $this->error_text; } function Execute($zf_sql, $zf_limit = false, $zf_cache = false, $zf_cachetime=0) { global $zc_cache; if ($zf_limit) { $zf_sql = $zf_sql . ' LIMIT ' . $zf_limit; } if ( $zf_cache AND $zc_cache->sql_cache_exists($zf_sql) AND !$zc_cache->sql_cache_is_expired($zf_sql, $zf_cachetime) ) { $obj = new queryFactoryResult; $obj->cursor = 0; $obj->is_cached = true; $obj->sql_query = $zf_sql; $zp_result_array = $zc_cache->sql_cache_read($zf_sql); $obj->result = $zp_result_array; if (sizeof($zp_result_array) > 0 ) { $obj->EOF = false; while (list($key, $value) = each($zp_result_array[0])) { $obj->fields[$key] = $value; } return $obj; } else { $obj->EOF = true; } } elseif ($zf_cache) { $zc_cache->sql_cache_expire_now($zf_sql); $time_start = explode(' ', microtime()); $obj = new queryFactoryResult; $obj->sql_query = $zf_sql; if (!$this->db_connected) $this->set_error('0', DB_ERROR_NOT_CONNECTED); $zp_db_resource = @mysql_query($zf_sql, $this->link); if (!$zp_db_resource) $this->set_error(mysql_errno(),mysql_error()); $obj->resource = $zp_db_resource; $obj->cursor = 0; $obj->is_cached = true; if ($obj->RecordCount() > 0) { $obj->EOF = false; $zp_ii = 0; while (!$obj->EOF) { $zp_result_array = @mysql_fetch_array($zp_db_resource); if ($zp_result_array) { while (list($key, $value) = each($zp_result_array)) { if (!ereg('^[0-9]', $key)) { $obj->result[$zp_ii][$key] = $value; } } } else { $obj->Limit = $zp_ii; $obj->EOF = true; } $zp_ii++; } while (list($key, $value) = each($obj->result[$obj->cursor])) { if (!ereg('^[0-9]', $key)) { $obj->fields[$key] = $value; } } $obj->EOF = false; } else { $obj->EOF = true; } $zc_cache->sql_cache_store($zf_sql, $obj->result); $time_end = explode (' ', microtime()); $query_time = $time_end[1]+$time_end[0]-$time_start[1]-$time_start[0]; $this->total_query_time += $query_time; $this->count_queries++; return($obj); } else { $time_start = explode(' ', microtime()); $obj = new queryFactoryResult; if (!$this->db_connected) $this->set_error('0', DB_ERROR_NOT_CONNECTED); $zp_db_resource = @mysql_query($zf_sql, $this->link); if (!$zp_db_resource) $this->set_error(mysql_errno($this->link),mysql_error($this->link)); $obj->resource = $zp_db_resource; $obj->cursor = 0; if ($obj->RecordCount() > 0) { $obj->EOF = false; $zp_result_array = @mysql_fetch_array($zp_db_resource); if ($zp_result_array) { while (list($key, $value) = each($zp_result_array)) { if (!ereg('^[0-9]', $key)) { $obj->fields[$key] = $value; } } $obj->EOF = false; } else { $obj->EOF = true; } } else { $obj->EOF = true; } $time_end = explode (' ', microtime()); $query_time = $time_end[1]+$time_end[0]-$time_start[1]-$time_start[0]; $this->total_query_time += $query_time; $this->count_queries++; return($obj); } } function ExecuteRandomMulti($zf_sql, $zf_limit = 0, $zf_cache = false, $zf_cachetime=0) { $time_start = explode(' ', microtime()); $obj = new queryFactoryResult; $obj->result = array(); if (!$this->db_connected) $this->set_error('0', DB_ERROR_NOT_CONNECTED); $zp_db_resource = @mysql_query($zf_sql); if (!$zp_db_resource) $this->set_error(mysql_errno(),mysql_error()); $obj->resource = $zp_db_resource; $obj->cursor = 0; $obj->Limit = $zf_limit; if ($obj->RecordCount() > 0 && $zf_limit > 0) { $obj->EOF = false; $zp_Start_row = 0; if ($zf_limit) { $zp_start_row = zen_rand(0, $obj->RecordCount() - $zf_limit); } $obj->Move($zp_start_row); $obj->Limit = $zf_limit; $zp_ii = 0; while (!$obj->EOF) { $zp_result_array = @mysql_fetch_array($zp_db_resource); if ($zp_ii == $zf_limit) $obj->EOF = true; if ($zp_result_array) { while (list($key, $value) = each($zp_result_array)) { $obj->result[$zp_ii][$key] = $value; } } else { $obj->Limit = $zp_ii; $obj->EOF = true; } $zp_ii++; } $obj->result_random = array_rand($obj->result, sizeof($obj->result)); if (is_array($obj->result_random)) { $zp_ptr = $obj->result_random[$obj->cursor]; } else { $zp_ptr = $obj->result_random; } while (list($key, $value) = each($obj->result[$zp_ptr])) { if (!ereg('^[0-9]', $key)) { $obj->fields[$key] = $value; } } $obj->EOF = false; } else { $obj->EOF = true; } $time_end = explode (' ', microtime()); $query_time = $time_end[1]+$time_end[0]-$time_start[1]-$time_start[0]; $this->total_query_time += $query_time; $this->count_queries++; return($obj); } function insert_ID() { return @mysql_insert_id($this->link); } function metaColumns($zp_table) { $res = @mysql_query("select * from " . $zp_table . " limit 1"); $num_fields = @mysql_num_fields($res); for ($i = 0; $i < $num_fields; $i++) { $obj[strtoupper(@mysql_field_name($res, $i))] = new queryFactoryMeta($i, $res); } return $obj; } function get_server_info() { if ($this->link) { return mysql_get_server_info($this->link); } else { return UNKNOWN; } } function queryCount() { return $this->count_queries; } function queryTime() { return $this->total_query_time; } } class queryFactoryResult { function queryFactoryResult() { $this->is_cached = false; } function MoveNext() { global $zc_cache; $this->cursor++; if ($this->is_cached) { if ($this->cursor >= sizeof($this->result)) { $this->EOF = true; } else { while(list($key, $value) = each($this->result[$this->cursor])) { $this->fields[$key] = $value; } } } else { $zp_result_array = @mysql_fetch_array($this->resource); if (!$zp_result_array) { $this->EOF = true; } else { while (list($key, $value) = each($zp_result_array)) { if (!ereg('^[0-9]', $key)) { $this->fields[$key] = $value; } } } } } function MoveNextRandom() { $this->cursor++; if ($this->cursor < $this->Limit) { $zp_result_array = $this->result[$this->result_random[$this->cursor]]; while (list($key, $value) = each($zp_result_array)) { if (!ereg('^[0-9]', $key)) { $this->fields[$key] = $value; } } } else { $this->EOF = true; } } function RecordCount() { return @mysql_num_rows($this->resource); } function Move($zp_row) { global $db; if (@mysql_data_seek($this->resource, $zp_row)) { $zp_result_array = @mysql_fetch_array($this->resource); while (list($key, $value) = each($zp_result_array)) { $this->fields[$key] = $value; } @mysql_data_seek($this->resource, $zp_row); return; } else { $db->set_error(mysql_errno(),mysql_error()); } } } class queryFactoryMeta { function queryFactoryMeta($zp_field, $zp_res) { $this->type = @mysql_field_type($zp_res, $zp_field); $this->max_length = @mysql_field_len($zp_res, $zp_field); } } ?>
コメント