バージョン選択

フォーラム

メニュー

オンライン状況

43 人のユーザが現在オンラインです。 (31 人のユーザが フォーラム を参照しています。)
登録ユーザ: 0
ゲスト: 43
もっと...

サイト内検索

質問 > 管理機能 > DBでカテゴリ情報をクリアしたあと、CSVで追加するとシステムエラーが発生

管理機能

新規スレッドを追加する

スレッド表示 | 新しいものから 前のトピック | 次のトピック | 下へ
投稿者 スレッド
taroh
投稿日時: 2012/10/23 10:08
対応状況: −−−
新米
登録日: 2012/7/26
居住地:
投稿: 6
DBでカテゴリ情報をクリアしたあと、CSVで追加するとシステムエラーが発生
何度かCSVでカテゴリをインポートしていたところ、カテゴリの表示が崩れてしまいました。(おそらく表示ランクが崩れてしまったため)。そこで以下の対応を行ったところシステムエラーが発生して現在つまずいています。

【カテゴリのDBクリアと再インポート】

一旦DBのカテゴリ情報を空にして改めてインポートし直すため、以下の対応を行いました。

1) 管理画面からカテゴリのCSVファイルをダウンロード

2) カテゴリ関連のDBをクリアする
 TRUNCATE `dtb_category`;
 TRUNCATE `dtb_category_category_id_seq`;
 ALTER TABLE `dtb_category_category_id_seq` AUTO_INCREMENT = 1;

3) カテゴリCSVを修正
 (1)でダウンロードしたCSVのうち、インポートに際し不要な数値を削除する。
 -----
 カテゴリID :そのまま
 カテゴリ名 :  〃
 親カテゴリID:  〃
 階層    :数値削除(1行目の項目名は残す)
 表示ランク :  〃
 削除フラグ :  〃
 -----

4) 管理画面から(3)のCSVファイルをインポート
 インポートすると、システムエラーが発生。エラーは発生するも、カテゴリは登録されています。
 -----
 Fatal error: Call to undefined method LC_Page_Admin_Products_UploadCSVCategory_Ex::sfGetParents() in
 /********/data/class/helper/SC_Helper_DB.php on line 754
 -----

【エラー原因の推測】

CSVの内容によってはエラーが発生しないことを確認しました。

例1) 問題なし
カテゴリID,カテゴリ名,親カテゴリID,階層,表示ランク,削除フラグ
1,A,0,,,
2,B,0,,,
3,C,0,,,

例2) 問題なし
カテゴリID,カテゴリ名,親カテゴリID,階層,表示ランク,削除フラグ
100000,A,0,,,
100001,B,0,,,
100002,C,0,,,

例3) システムエラー
カテゴリID,カテゴリ名,親カテゴリID,階層,表示ランク,削除フラグ
100001,A,0,,,
100003,C,0,,,

以上から、特定のカテゴリIDがあるとエラーが発生するのでは?と推測するに至りました。上記の場合、カテゴリID:100003があるとシステムエラーが発生します。このカテゴリは実際に商品データから指定されているカテゴリだと分かっていて、それ以外のカテゴリ(ID:1,2,3…)は、いずれも指定している商品は存在しません。
※一度システムエラーが発生したあと、例1や例2など問題なかったCSVファイルをインポートして追加しようとしてもなぜかシステムエラーが発生するようになります。

この結果から、以下の疑問が生まれました。

a) すでに商品側から指定されたカテゴリを削除してから追加することは出来ないのでしょうか?そのような仕様であれば、このケースではカテゴリ情報をクリアして入れ替えるだけではダメで、商品情報とカテゴリの削除→カテゴリの追加→商品追加という手順を踏まなければいけないのでしょうか?

b) そもそもカテゴリ情報を入れ替える手順として、上記の(1)〜(4)では問題があるのでしょうか?

よろしくお願いいたします。

[EC-CUBE]2.11.4
[PHP] PHP5.1.6
[データベース] MySQL5.0.77
[WEBサーバ] Apache/2.2.21
[ブラウザ] Firefox 15.0.1
seasoft
投稿日時: 2012/10/23 10:48
対応状況: −−−
登録日: 2008/6/4
居住地:
投稿: 7367
Re: DBでカテゴリ情報をクリアしたあと、CSVで追加するとシステムエラーが発生
とりあえず、エラー行を下記のように書き換えると、変化があるかも。


$arrParentID = $this->sfGetParents('dtb_category', 'parent_category_id', 'category_id', $parent_category_id);

 ↓

$arrParentID = SC_Helper_DB_Ex::sfGetParents('dtb_category', 'parent_category_id', 'category_id', $parent_category_id);


バックアップなど忘れずに・・・


----------------
Seasoft
こちらでの投稿は、アイディア程度に留めさせていただいております。
個別案件の作業は有償で承っております。お気軽にご相談ください。

taroh
投稿日時: 2012/10/23 14:48
対応状況: −−−
新米
登録日: 2012/7/26
居住地:
投稿: 6
Re: DBでカテゴリ情報をクリアしたあと、CSVで追加するとシステムエラーが発生
ご回答ありがとうございます!
SC_Helper_DB.php の754行目をいただいた内容に修正したところ、今度は766行目でエラーが出たので、計2箇所を修正してインポート出来ることを確認しました。有難うございます。

なお、今回の修正は商品情報が入ってる状況で、カテゴリを一から入れ替える際の一時的な対処手段と考えて良いでしょうか?であればphpファイルは以前のものに戻しておこうと思っています。

ファイル:/********/data/class/helper/SC_Helper_DB.php

754行目
$arrParentID = $this->sfGetParents('dtb_category', 'parent_category_id', 'category_id', $parent_category_id);
↓
$arrParentID = SC_Helper_DB_Ex::sfGetParents('dtb_category', 'parent_category_id', 'category_id', $parent_category_id);

766行目
list($tmp_where, $tmp_arrval) = $this->sfGetCatWhere($category_id);
↓
list($tmp_where, $tmp_arrval) = SC_Helper_DB_Ex::sfGetCatWhere($category_id);
namacha
投稿日時: 2012/10/25 0:11
対応状況: −−−
半人前
登録日: 2012/7/15
居住地:
投稿: 24
Re: DBでカテゴリ情報をクリアしたあと、CSVで追加するとシステムエラーが発生

いただいたURLは拝見しました。今回の場合は必ずシステムエラーが発生するのではなく、CSVファイルの内容によっては問題が起こらないので、CSVの内容や手順を疑っています。

結局、呼ばれる側(SC_Helper_DB.php)を直されたんですね。
もうそのクラスの内容をよく覚えてないですがコンストラクタがないクラスならSC_Helper_DB_Ex::で呼ぶ直しかたの方が正しいと思います。

とりあえずこの現象は"特定条件下"で、「何かの処理がエラーになっている」訳ではなくて、「(プログラムが)次に処理する関数が指定された場所になくてどうしていいか分からない」せいでエラーになっています。
今回SC_Helper_DB.phpで修正されているのは、それを正す物ですので、修正後のままで大丈夫だと思います。

「処理の遷移を正しくしたことで起きるエラー」は、また別の話です。
スレッド表示 | 新しいものから 前のトピック | 次のトピック | トップ


 



ログイン


EC-CUBE公式 Amazon Payプラグイン

統計情報

総メンバー数は89,712名です
総投稿数は110,154件です

投稿数ランキング

1
seasoft
7367
2
468
3217
3
AMUAMU
2712
4
nanasess
2314
5
umebius
2085
6
yuh
1819
7
h_tanaka
1657
8
red
1570
9
mcontact
1327
10
tsuji
958
11
fukap
907
12
shutta
835
13
tao_s
799
14 ramrun 789
15 karin 689
16 sumida 641
17
homan
633
18 DELIGHT 572
19
patapata
502
20
flealog
485


ネットショップの壺

EC-CUBEインテグレートパートナー

Copyright© EC-CUBE CO.,LTD. All Rights Reserved.