ZenCart 文字化け対処(1.2系)

文字化け対処 – 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);
}
}
?>

関連記事

スポンサードリンク

Comments

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です