バージョン選択

フォーラム

メニュー

オンライン状況

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

サイト内検索

その他 > その他 > テストデータ生成スクリプトについて

その他

新規スレッドを追加する

フラット表示 前のトピック | 次のトピック
投稿者 スレッド
ramrun
投稿日時: 2010/2/9 22:56
対応状況: −−−
仙人
登録日: 2006/11/3
居住地:
投稿: 789
Re: テストデータ生成スクリプトについて
昔、作ったような気がしたので探してみました。

たしかPostgreSQL用でMySQLだとエラーがでていたので、そのあたりをいじっていたと思います。
それと、コミュ版で試すのにメーカーを追加したりとか、ちょこちょこといじってますので、気になる人は差分を取ってください。

下記はメーカーの部分を///でコメントアウトしているので、コミュ版で試す際は///を検索して外してください(4ヵ所)。

#!/usr/bin/php -q
<?php
/*
 * EC-CUBE データ生成スクリプト
 *
 * Copyright(c) 2000-2008 LOCKON CO.,LTD. All Rights Reserved.
 *
 * http://www.lockon.co.jp/
 *
 * This program is free software; you can redistribute it and/or
 * modify it under the terms of the GNU General Public License
 * as published by the Free Software Foundation; either version 2
 * of the License, or (at your option) any later version.
 *
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License
 * along with this program; if not, write to the Free Software
 * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
 *
 * @auther Kentaro Ohkouchi
 * @version $Id$
 */

// {{{ requires
require_once("./data/module/DB.php");

// }}}
// {{{ constants

/** データベース種別 */
define("DB_TYPE", "mysql");
/** DBホスト */
define("DB_SERVER", "localhost");
/** DBポート */
define("DB_PORT", "");
/** DB名 */
define("DB_NAME", "eccube_db");
/** DBユーザー */
define("DB_USER", "eccube_db_user");
/** DBパスワード */
define("DB_PASSWORD", "password");

/** データソース名 */
define ("DEFAULT_DSN",
        DB_TYPE . "://" . DB_USER . ":" . DB_PASSWORD . "@"
                    . DB_SERVER . ":" .DB_PORT . "/" . DB_NAME);

/** 大カテゴリ数 x 中カテゴリ数 x 小カテゴリ数 < 91 となるように */
/** 大カテゴリの生成数 */
define("TOP_CATEGORIES_VOLUME", 10);

/** 中カテゴリの生成数 */
define("MIDDLE_CATEGORIES_VOLUME", 2);

/** 小カテゴリの生成数 */
define("SMALL_CATEGORIES_VOLUME", 3);

/** 規格1の生成数 */
define("CLASSCATEGORY1_VOLUME", 3);

/** 規格2の生成数 */
define("CLASSCATEGORY2_VOLUME", 5);

/** 商品の生成数 */
define("PRODUCTS_VOLUME", 200);

/** 1つの商品を最大いくつのカテゴリに登録させるか */
define("MAX_PRODUCTS_CATEGORIES", 3);

// }}}
// {{{ Logic -------------------------------------

$objData = new CreateEcCubeData();
$start = microtime(true);

$objData->objQuery->begin();
$objData->deleteItems();               // 既存テーブルのデータ削除
$objData->createCategories();          // カテゴリ生成
$objData->createClassData();           // 規格生成
///$objData->createMaker();             // メーカー生成
$objData->createProducts();            // 商品生成
$objData->relateClass();               // 商品と規格の関連づけ
$objData->relateProductsCategories();  // 商品とカテゴリの関連づけ
$objData->objQuery->commit();

$end = microtime(true);
print("データの生成が完了しました!\n");
printf("所要時間 %f 秒\n", $end - $start);

// }}}
// {{{ classes -----------------------------------

/**
 * EC-CUBE のデータを生成する
 */
class CreateEcCubeData {

    /** SC_Query インスタンス */
    var $objQuery;

    /** 大カテゴリID の配列 */
    var $arrCategory1  = array();

    /** 中カテゴリID の配列 */
    var $arrCategory2  = array();

    /** 小カテゴリID の配列 */
    var $arrCategory3  = array();

    /** 規格1 */
    var $arrClassCategory_id1 = array();

    /** 規格2 */
    var $arrClassCategory_id2 = array();

    /**
     * コンストラクタ.
     */
    function CreateEcCubeData() {
        $this->objQuery = new SC_Query();
    }

    function deleteItems() {
        print("既存の商品データを削除しています...\n");

        $this->objQuery->delete("dtb_category_total_count");
        $this->objQuery->delete("dtb_category_count");

        $this->objQuery->delete("dtb_category");              // カテゴリ
        $this->objQuery->delete("dtb_product_categories");    //  |
        $this->objQuery->delete("dtb_products");              // 商品
        $this->objQuery->delete("dtb_products_class");        //  |
        $this->objQuery->delete("dtb_classcategory");         //  |
        $this->objQuery->delete("dtb_class");                 // 規格

///      $this->objQuery->delete("dtb_maker");
///      $this->objQuery->delete("dtb_maker_count");
    }

    /**
     * カテゴリを生成する.
     *
     * 以下のように, ツリー状のカテゴリを生成する
     *
     *  大カテゴリ -- 中カテゴリ -- 小カテゴリ
     *             |             |- 小カテゴリ
     *             |             |- 小カテゴリ
     *             |
     *             |- 中カテゴリ -- 小カテゴリ
     *                            |- 小カテゴリ
     *                            |- 小カテゴリ
     * @return void
     */
    function createCategories() {

        print("カテゴリを生成しています...\n");

        $count = TOP_CATEGORIES_VOLUME 
               + TOP_CATEGORIES_VOLUME * MIDDLE_CATEGORIES_VOLUME 
               + TOP_CATEGORIES_VOLUME * MIDDLE_CATEGORIES_VOLUME * SMALL_CATEGORIES_VOLUME;

        // 全カテゴリ共通の値
        $sqlval['creator_id'] = 2;
        $sqlval['create_date'] = "now()";
        $sqlval['update_date'] = "now()";
        $sqlval['del_flg'] = (string) "0";

        $m = 0;
        $n = 0;
        // 大カテゴリを生成
        for ($i = 0; $i < TOP_CATEGORIES_VOLUME; $i++) {
            $sqlval['category_name'] = $this->arrCategoryName[$i];
            $sqlval['parent_category_id'] = (string) "0";
            $sqlval['level'] = 1;
            $sqlval['rank'] = $count;

            $this->objQuery->insert("dtb_category", $sqlval);
            $category_id1 = $this->objQuery->currval("dtb_category", "category_id");
            $this->arrCategory1[] = $category_id1;
            $count--;
            print(".");

            // 中カテゴリを生成
            for ($j = 0; $j < mt_rand(1, MIDDLE_CATEGORIES_VOLUME); $j++) {
                $sqlval['category_name'] = $this->arrCategoryName[$m++ + TOP_CATEGORIES_VOLUME];
                $sqlval['parent_category_id'] = (string) $category_id1;
                $sqlval['level'] = 2;
                $sqlval['rank'] = $count;

                $this->objQuery->insert("dtb_category", $sqlval);
                $category_id2 = $this->objQuery->currval("dtb_category", "category_id");
                $this->arrCategory2[] = $category_id2;
                $count--;
                print(".");

                // 小カテゴリを生成
                for ($k = 0; $k < mt_rand(1, SMALL_CATEGORIES_VOLUME); $k++) {
                    $sqlval['category_name'] = $this->arrCategoryName[$n++ + TOP_CATEGORIES_VOLUME + MIDDLE_CATEGORIES_VOLUME];
                    $sqlval['parent_category_id'] = (string) $category_id2;
                    $sqlval['level'] = 3;
                    $sqlval['rank'] = $count;

                    $this->objQuery->insert("dtb_category", $sqlval);
                    $category_id3 = $this->objQuery->currval("dtb_category", "category_id");
                    $this->arrCategory3[] = $category_id3;
                    $count--;
                    print(".");
                }
            }
        }
        print("\n");
    }

    /**
     * 規格を生成する.
     *
     * @return void
     */
    function createClassData() {
        // 規格データ生成
        print("規格データを生成しています...\n");
        $this->createClass("Size");
        $this->createClass("Color");
        print("\n");

        // 規格分類データ生成
        print("規格分類データを生成しています...\n");

        // 規格1
        for ($i = 0; $i < CLASSCATEGORY1_VOLUME; $i++) {
            $this->createClassCategory($this->arrSize[$i], $this->arrclass_id[0], "size");
        }

        // 規格2
        for ($i = 0; $i < CLASSCATEGORY2_VOLUME; $i++) {
            $this->createClassCategory($this->arrColor[$i], $this->arrclass_id[1], "color");
        }
        print("\n");
    }

    /**
     * 商品と規格の関連づけを行う.
     *
     * @return void
     */
    function relateClass() {

        print("商品と規格の関連づけを行います...\n");

        foreach ($this->arrProduct_id as $product_id) {
            $this->createProductsClass($product_id);
        }
        print("\n");
    }

    /**
     * 商品を生成する.
     *
     * @return void
     */
    function createProducts() {

        print("商品を生成しています...\n");
        for ($i = 0; $i < PRODUCTS_VOLUME; $i++) {
            $sqlval['name'] = sprintf("商品%d", $i);
            //$sqlval['deliv_fee'];
            //$sqlval['sale_limit'] = 1;
            $sqlval['sale_unlimited'] = 1;
            //$sqlval['category_id'];
///         $sqlval['maker_id'] = mt_rand(min($this->arrMakerId), max($this->arrMakerId));
            //$sqlval['rank'];
            $sqlval['status'] = 1;
            $sqlval['product_flag'] = "10010";
            $sqlval['point_rate'] = (string) mt_rand(0, 3);
            //$sqlval['comment1'];
            //$sqlval['comment2'];
            $sqlval['comment3'] = "コメント";
            //$sqlval['comment4'];
            //$sqlval['comment5'];
            //$sqlval['comment6'];
            //$sqlval['note'];
            //$sqlval['file1'];
            //$sqlval['file2'];
            //$sqlval['file3'];
            //$sqlval['file4'];
            //$sqlval['file5'];
            //$sqlval['file6'];
            $sqlval['main_list_comment'] = "商品一覧コメント";
            $sqlval['main_list_image'] = "08311201_44f65122ee5fe.jpg";
            $sqlval['main_comment'] = "詳細メインコメント";
            $sqlval['main_image'] = "08311202_44f6515906a41.jpg";
            $sqlval['main_large_image'] = "08311203_44f651959bcb5.jpg";
            $sqlval['sub_title1'] = "詳細サブタイトル1";
            $sqlval['sub_comment1'] = "詳細サブコメント1";
            //$sqlval['sub_image1'];
            //$sqlval['sub_large_image1'];
            //$sqlval['sub_title2'];
            //$sqlval['sub_comment2'];
            //$sqlval['sub_image2'];
            //$sqlval['sub_large_image2'];
            //$sqlval['sub_title3'];
            //$sqlval['sub_comment3'];
            //$sqlval['sub_image3'];
            //$sqlval['sub_large_image3'];
            //$sqlval['sub_title4'];
            //$sqlval['sub_comment4'];
            //$sqlval['sub_image4'];
            //$sqlval['sub_large_image4'];
            //$sqlval['sub_title5'];
            //$sqlval['sub_comment5'];
            //$sqlval['sub_image5'];
            //$sqlval['sub_large_image5'];
            //$sqlval['sub_title6'];
            //$sqlval['sub_comment6'];
            //$sqlval['sub_image6'];
            //$sqlval['sub_large_image6'];
            $sqlval['del_flg'] = (string) "0";
            $sqlval['creator_id'] = 2;
            $sqlval['create_date'] = "now()";
            $sqlval['update_date'] = "now()";
            $sqlval['deliv_date_id'] = 2;

            $this->objQuery->insert("dtb_products", $sqlval);
            $this->arrProduct_id[] = $this->objQuery->currval("dtb_products", "product_id");
            print("*");
        }
    }

    /**
     * 規格を生成する.
     *
     * @param $class_name string 規格名
     * @return void
     */
    function createClass($class_name) {
        $sqlval['name'] = $class_name;
        $sqlval['status'] = null;
        $rank = $this->objQuery->getOne(
            "SELECT CASE
                     WHEN max(rank) + 1 IS NULL THEN 1
                     ELSE max(rank) + 1
                   END
              FROM dtb_class
             WHERE del_flg = 0");
        $sqlval['rank'] = $rank;
        $sqlval['creator_id'] = 2;
        $sqlval['update_date'] = "now()";
        $sqlval['del_flg'] = (string) "0";
        $sqlval['product_id'] = null;

        $this->objQuery->insert("dtb_class", $sqlval);

        // class_idを取得
        $this->arrclass_id[] = $this->objQuery->currval("dtb_class", "class_id");
        print("+");
    }

    /**
     * 規格分類を生成する.
     *
     * @param $classcategory_name string 規格名
     * @return void
     */
    function createClassCategory($classcategory_name, $class_id, $class_name) {
        $sqlval['name'] = $classcategory_name;
        $sqlval['class_id'] = $class_id;
        $sqlval['status'] = null;
        $rank = $this->objQuery->getOne(
            "SELECT CASE
                     WHEN max(rank) + 1 IS NULL THEN 1
                     ELSE max(rank) + 1
                   END
              FROM dtb_classcategory
             WHERE del_flg = 0
               AND class_id = " . $class_id);
        $sqlval['rank'] = $rank;
        $sqlval['creator_id'] = 2;
        $sqlval['create_date'] = "now()";
        $sqlval['update_date'] = "now()";
        $sqlval['del_flg'] = (string) "0";

        $this->objQuery->insert("dtb_classcategory", $sqlval);

        switch ($class_name) {
        case "size":
            $this->arrClassCategory_id1[] =
                $this->objQuery->currval("dtb_classcategory", "classcategory_id");
            break;

        case "color":
            $this->arrClassCategory_id2[] =
                $this->objQuery->currval("dtb_classcategory", "classcategory_id");
            break;
        default:
        }
        print("+");
    }

    /**
     * 商品規格を生成する.
     *
     * @param integer $product_id 商品ID
     * @return void
     */
    function createProductsClass($product_id) {

        printf("商品ID %d の商品規格を生成しています...\n", $product_id);

        $sqlval['product_id'] = $product_id;
        $sqlval['classcategory_id1'] = (string) "0";
        $sqlval['classcategory_id2'] = (string) "0";
        $sqlval['stock_unlimited'] = 1;
        $sqlval['price01'] = mt_rand(10, 10000);
        $sqlval['price02'] = mt_rand($sqlval['price01'], $sqlval['price01'] * 2);
        $sqlval['creator_id'] = 2;
        $sqlval['create_date'] = "now()";
        $sqlval['update_date'] = "now()";

        $hasClassCategory_id1 = mt_rand(0, 1);
        $hasClassCategory_id2 = mt_rand(0, 2);

        if (!$hasClassCategory_id1) {
            $sqlval['product_code'] = sprintf("商品コード%d-%d", $product_id, $count);
            $this->objQuery->insert("dtb_products_class", $sqlval);
            print("#");
        } else {
            $count = 0;
            foreach ($this->arrClassCategory_id1 as $classCategory_id1) {
                $sqlval['classcategory_id1'] = $classCategory_id1;

                if (!$hasClassCategory_id2) {
                    $sqlval['product_code'] = sprintf("商品コード%d-%d", $product_id, $count);

                    $this->objQuery->insert("dtb_products_class", $sqlval);
                    $count++;
                    print("#");
                } else {
                    foreach ($this->arrClassCategory_id2 as $classCategory_id2) {
                        $sqlval['classcategory_id2'] = $classCategory_id2;
                        $sqlval['product_code'] = sprintf("商品コード%d-%d", $product_id, $count);

                        $this->objQuery->insert("dtb_products_class", $sqlval);
                        $count++;
                        print("#");
                    }
                }
            }
        }
        print("\n");
    }

    /**
     * 商品とカテゴリの関連づけを行う.
     *
     * @return void
     */
    function relateProductsCategories() {

        print("商品とカテゴリの関連づけを行います...\n");
        $this->createProductsCategories(
            array_merge(
                $this->arrCategory1
               ,$this->arrCategory2
               ,$this->arrCategory3));
    }

    /**
     * 商品カテゴリを生成する.
     *
     * @param array $arrCategory_id カテゴリID の配列
     * @return void
     */
    function createProductsCategories($arrCategory_id) {

        printf("%s の商品カテゴリを生成しています...\n");

        $arrRank = array();

        foreach ($this->arrProduct_id as $product_id) {
            $sqlval['product_id'] = $product_id;

            shuffle($arrCategory_id);
            $esta = mt_rand(1, MAX_PRODUCTS_CATEGORIES);

            for ($i = 0; $i < $esta; $i++) {
                $sqlval['category_id'] = $arrCategory_id[$i];
                $arrRank[$sqlval['category_id']]++;
                $sqlval['rank'] = $arrRank[$sqlval['category_id']];

                $this->objQuery->insert("dtb_product_categories", $sqlval);
                print("$");
            }
        }
    }

    /**
     * メーカーを生成する.
     *
     * @return void
     */
    function createMaker() {

        print("メーカーを生成しています...\n");

        $sqlval['creator_id'] = 2;
        $sqlval['create_date'] = "now()";
        $sqlval['update_date'] = "now()";
        $sqlval['del_flg'] = (string) "0";

        $count = 1;
        foreach ($this->arrMakerName as $makerName) {
            $sqlval['name'] = $makerName;
            $sqlval['rank'] = $count;
            $this->objQuery->insert("dtb_maker", $sqlval);
            $maker_id = $this->objQuery->currval("dtb_maker", "maker_id");
            $this->arrMakerId[] = $maker_id;
            $count++;
            print("$");
        }
        print("\n");
    }

    /** カテゴリ名 91個 */
    var $arrCategoryName = array("Sun"
                         ,"Sirius"
                         ,"Canopus"
                         ,"Arcturus"
                         ,"Alpha Centauri A"
                         ,"Vega"
                         ,"Rigel"
                         ,"Procyon"
                         ,"Achemar"
                         ,"Betelgeuse"
                         ,"Hadar"
                         ,"Capella A"
                         ,"Altair"
                         ,"Aldebaran"
                         ,"Capela B"
                         ,"Spica"
                         ,"Antares"
                         ,"Pollux"
                         ,"Fomalhaut"
                         ,"Deneb"
                         ,"Mimosa"
                         ,"Alpha Centauri B"
                         ,"Regulus"
                         ,"Acrux A"
                         ,"Adara"
                         ,"Shaula"
                         ,"Gacrux"
                         ,"Bellatrix"
                         ,"El Nath"
                         ,"Miaplacidus"
                         ,"Alnilam"
                         ,"Alnitak A"
                         ,"Al Na'ir"
                         ,"Alioth"
                         ,"Gamma2 Velorum A"
                         ,"Kaus Australis"
                         ,"Mirfak"
                         ,"Wezen"
                         ,"Benetnasch"
                         ,"Sargas"
                         ,"Dubhe A"
                         ,"Alhena"
                         ,"Peacock"
                         ,"Atria"
                         ,"Castor A"
                         ,"Murzim"
                         ,"Alphard"
                         ,"Hamal"
                         ,"Polaris"
                         ,"Delta Velorum A"
                         ,"Deneb Kaitos"
                         ,"Saiph"
                         ,"Nunki"
                         ,"Menkent"
                         ,"Alpheratz"
                         ,"Mirach"
                         ,"Kochab"
                         ,"Acrux B"
                         ,"Ras Alhague"
                         ,"Algol"
                         ,"Beta Gruis"
                         ,"Denebola"
                         ,"Naos"
                         ,"Lambda Velorum"
                         ,"Etamin"
                         ,"Gemma A"
                         ,"Sadr"
                         ,"Schedar"
                         ,"Aspidiske"
                         ,"Almach A"
                         ,"Mizar A"
                         ,"Caph"
                         ,"Epsilon Centauri"
                         ,"Algieba A"
                         ,"Alpha Lupi"
                         ,"Dschubba"
                         ,"Wei"
                         ,"Eta Centauri"
                         ,"Merak"
                         ,"Ankaa"
                         ,"Girtab"
                         ,"Gamma Cassiopeiae"
                         ,"Enif"
                         ,"Aludra"
                         ,"Avior A"
                         ,"Scheat"
                         ,"Phecda"
                         ,"Alderamin"
                         ,"Kappa Velorum"
                         ,"Markab"
                         ,"Gienah"
                     );

    /** 規格1 */
    var $arrSize = array("m11(29cm)"
                         ,"m10 1/2(28.5cm)"
                         ,"m10(28cm)"
                         ,"m9 1/2(27.5cm)"
                         ,"m9(27cm)"
                         ,"m8 1/2(26.5cm)"
                         ,"m8(26cm)"
                         ,"43"
                         ,"42"
                         ,"41"
                         ,"43(27.0cm?27.5cm)"
                         ,"42(26.5cm?27.0cm)"
                         ,"37(ladies 23.5?24cm)"
                         ,"42(約27.5cm)"
                         ,"41(約26.5cm)"
                         ,"W36"
                         ,"W34"
                         ,"W32"
                         ,"43"
                         ,"42"
                         ,"41"
                         ,"m11"
                         ,"m10"
                         ,"m9.5"
                         ,"m9"
                         ,"m8"
                         ,"FREE"
                         ,"XS"
                         ,"S"
                         ,"M"
                         ,"L"
                         ,"XL"
                         ,"25-27"
                         ,"27-29"
                         ,"W28"
                         ,"W29"
                         ,"W30"
                         ,"W31"
                         ,"W32"
                         ,"W33"
                         ,"W34"
                         ,"W35"
                         ,"W36"
                         ,"4"
                         ,"6"
                         ,"8"
                         ,"10"
                         ,"12"
                         ,"10cm"
                         ,"12cm"
                         ,"14cm"
                         ,"16cm"
                         ,"18cm"
                         ,"20cm"
                         ,"22cm"
                         ,"24cm"
                         ,"26cm"
                         ,"28cm"
                         ,"30cm"
                         ,"32cm"
                         ,"34cm"
                         ,"36cm"
                         ,"38cm"
                         ,"40cm"
                         ,"10g"
                         ,"20g"
                         ,"30g"
                         ,"40g"
                         ,"50g"
                         ,"60g"
                         ,"70g"
                         ,"80g"
                         ,"90g"
                         ,"100g"
                         ,"110g"
                         ,"120g"
                         ,"130g"
                         ,"140g"
                         ,"150g"
                         ,"160g"
                         ,"170g"
                         ,"180g"
                         ,"190g"
                         ,"200g"
                         ,"8inch"
                         ,"10inch"
                         ,"12inch"
                         ,"14inch"
                         ,"16inch"
                         ,"18inch"
                         ,"20inch"
                         ,"22inch"
                         ,"24inch"
                         ,"26inch"
                         ,"28inch"
                         ,"30inch"
                         ,"32inch"
                         ,"34inch"
                         ,"36inch"
                         ,"38inch"
                    );

    /** 規格2 */
    var $arrColor = array("white"
                         ,"whitesmoke"
                         ,"snow"
                         ,"ghostwhite"
                         ,"mintcream"
                         ,"azure"
                         ,"ivory"
                         ,"floralwhite"
                         ,"aliceblue"
                         ,"lavenderblush"
                         ,"seashell"
                         ,"honeydew"
                         ,"lightyellow"
                         ,"oldlace"
                         ,"cornsilk"
                         ,"linen"
                         ,"lemonchiffon"
                         ,"lavender"
                         ,"beige"
                         ,"lightgoldenrodyellow"
                         ,"mistyrose"
                         ,"papayawhip"
                         ,"antiquewhite"
                         ,"lightcyan"
                         ,"cyan"
                         ,"aqua"
                         ,"darkcyan"
                         ,"teal"
                         ,"darkslategray"
                         ,"turquoise"
                         ,"paleturquoise"
                         ,"mediumturquoise"
                         ,"aquamarine"
                         ,"gainsboro"
                         ,"lightgray"
                         ,"silver"
                         ,"darkgray"
                         ,"gray"
                         ,"dimgray"
                         ,"black"
                         ,"powderblue"
                         ,"lightblue"
                         ,"lightskyblue"
                         ,"skyblue"
                         ,"darkturquoise"
                         ,"deepskyblue"
                         ,"dodgerblue"
                         ,"royalblue"
                         ,"cornflowerblue"
                         ,"cadetblue"
                         ,"lightsteelblue"
                         ,"steelblue"
                         ,"lightslategray"
                         ,"slategray"
                         ,"blue"
                         ,"mediumblue"
                         ,"darkblue"
                         ,"navy"
                         ,"midnightblue"
                         ,"lightsalmon"
                         ,"darksalmon"
                         ,"salmon"
                         ,"tomato"
                         ,"lightcoral"
                         ,"coral"
                         ,"crimson"
                         ,"red"
                         ,"mediumorchid"
                         ,"mediumpurple"
                         ,"mediumslateblue"
                         ,"slateblue"
                         ,"blueviolet"
                         ,"darkviolet"
                         ,"darkorchid"
                         ,"darkslateblue"
                         ,"darkorchid"
                         ,"thistle"
                         ,"plum"
                         ,"violet"
                         ,"magenta"
                         ,"fuchsia"
                         ,"darkmagenta"
                         ,"purple"
                         ,"palegreen"
                         ,"lightgreen"
                         ,"lime"
                         ,"limegreen"
                         ,"forestgreen"
                         ,"green"
                         ,"darkgreen"
                         ,"greenyellow"
                         ,"chartreuse"
                         ,"lawngreen"
                         ,"yellowgreen"
                         ,"olivedrab"
                         ,"darkolivegreen"
                         ,"mediumaquamarine"
                         ,"mediumspringgreen"
                         ,"springgreen"
                         ,"darkseagreen"
                     );

    /** メーカー */
    var $arrMakerName = array("日水"
                         ,"マルハニチロ"
                         ,"サカタのタネ"
                         ,"キリン"
                         ,"アサヒ"
                         ,"味の素"
                         ,"日本ハム"
                         ,"サッポロ"
                         ,"山崎パン"
                         ,"ニチレイ"
                         ,"日清"
                         ,"キューピー"
                         ,"キッコーマン"
                         ,"森永"
                         ,"ヤクルト"
                         ,"ダイワボウ"
                         ,"日清紡"
                         ,"ワコール"
                         ,"レナウン"
                         ,"武田薬品"
                         ,"資生堂"
                         ,"花王"
                         ,"塩野義薬"
                         ,"ブリヂストン"
                         ,"横浜ゴム"
                         ,"三洋電機"
                         ,"NEC"
                         ,"東芝"
                         ,"日立"
                         ,"富士通"
                         ,"シャープ"
                         ,"パイオニア"
                         ,"パナソニック"
                         ,"ソニー"
                         ,"マツダ"
                         ,"いすゞ"
                         ,"日産"
                         ,"ホンダ"
                         ,"トヨタ"
                         ,"ヤマハ"
                         ,"スズキ"
                         ,"ダイハツ"
                         ,"ニコン"
                         ,"シチズン"
                         ,"オリンパス"
                         ,"セイコー"
                         ,"任天堂"
                         ,"河合楽器"
                         ,"タカラ"
                         ,"富士フイルム"
                     );

}

/**
 * クエリを生成して実行する.
 *
 * (EC-CUBE からの移植)
 */
class SC_Query {
    var $option;
    var $where;
    var $conn;
    var $groupby;
    var $order;

    // コンストラクタ
    /*
        $err_disp:エラー表示を行うか
        $new:新規に接続を行うか
     */
    function SC_Query($dsn = "", $err_disp = true, $new = false) {
        $this->conn = new SC_DbConn($dsn, $err_disp, $new);
        $this->where = "";
        return $this->conn;
    }

    // エラー判定
    function isError() {
        if(PEAR::isError($this->conn->conn)) {
            return true;
        }
        return false;
    }

    // COUNT文の実行
    function count($table, $where = "", $arrval = array()) {
        if(strlen($where) <= 0) {
            $sqlse = "SELECT COUNT(*) FROM $table";
        } else {
            $sqlse = "SELECT COUNT(*) FROM $table WHERE $where";
        }
        // カウント文の実行
        $ret = $this->conn->getOne($sqlse, $arrval);
        return $ret;
    }

    function select($col, $table, $where = "", $arrval = array()){
        $sqlse = $this->getsql($col, $table, $where);
        $ret = $this->conn->getAll($sqlse, $arrval);
        return $ret;
    }

    function getLastQuery($disp = true) {
        $sql = $this->conn->conn->last_query;
        if($disp) {
            print($sql.";<br />\n");
        }
        return $sql;
    }

    function commit() {
        $this->conn->query("COMMIT");
    }

    function begin() {
        $this->conn->query("BEGIN");
    }

    function rollback() {
        $this->conn->query("ROLLBACK");
    }

    function exec($str, $arrval = array()) {
        $this->conn->query($str, $arrval);
    }

    function autoselect($col, $table, $arrwhere = array(), $arrcon = array()) {
        $strw = "";
        $find = false;
        foreach ($arrwhere as $key => $val) {
            if(strlen($val) > 0) {
                if(strlen($strw) <= 0) {
                    $strw .= $key ." LIKE ?";
                } else if(strlen($arrcon[$key]) > 0) {
                    $strw .= " ". $arrcon[$key]. " " . $key ." LIKE ?";
                } else {
                    $strw .= " AND " . $key ." LIKE ?";
                }

                $arrval[] = $val;
            }
        }

        if(strlen($strw) > 0) {
            $sqlse = "SELECT $col FROM $table WHERE $strw ".$this->option;
        } else {
            $sqlse = "SELECT $col FROM $table ".$this->option;
        }
        $ret = $this->conn->getAll($sqlse, $arrval);
        return $ret;
    }

    function getall($sql, $arrval = array()) {
        $ret = $this->conn->getAll($sql, $arrval);
        return $ret;
    }

    function getsql($col, $table, $where) {
        if($where != "") {
            // 引数の$whereを優先して実行する。
            $sqlse = "SELECT $col FROM $table WHERE $where " . $this->groupby . " " . $this->order . " " . $this->option;
        } else {
            if($this->where != "") {
                    $sqlse = "SELECT $col FROM $table WHERE $this->where " . $this->groupby . " " . $this->order . " " . $this->option;
                } else {
                    $sqlse = "SELECT $col FROM $table " . $this->groupby . " " . $this->order . " " . $this->option;
            }
        }
        return $sqlse;
    }

    function setoption($str) {
        $this->option = $str;
    }

    function setlimitoffset($limit, $offset = 0, $return = false) {
        if (is_numeric($limit) && is_numeric($offset)){

            $option = " LIMIT " . $limit;
            $option.= " OFFSET " . $offset;

            if($return){
                return $option;
            }else{
                $this->option.= $option;
            }
        }
    }

    function setgroupby($str) {
        $this->groupby = "GROUP BY " . $str;
    }

    function andwhere($str) {
        if($this->where != "") {
            $this->where .= " AND " . $str;
        } else {
            $this->where = $str;
        }
    }

    function orwhere($str) {
        if($this->where != "") {
            $this->where .= " OR " . $str;
        } else {
            $this->where = $str;
        }
    }

    function setwhere($str) {
        $this->where = $str;
    }

    function setorder($str) {
        $this->order = "ORDER BY " . $str;
    }


    function setlimit($limit){
        if ( is_numeric($limit)){
            $this->option = " LIMIT " .$limit;
        }
    }

    function setoffset($offset) {
        if ( is_numeric($offset)){
            $this->offset = " OFFSET " .$offset;
        }
    }


    // INSERT文の生成・実行
    // $table   :テーブル名
    // $sqlval  :列名 => 値の格納されたハッシュ配列
    function insert($table, $sqlval) {
        $strcol = '';
        $strval = '';
        $find = false;

        if(count($sqlval) <= 0 ) return false;

        foreach ($sqlval as $key => $val) {
            $strcol .= $key . ','; 
            if(eregi("^Now\(\)$", (string) $val)) {
                $strval .= 'Now(),';
            // 先頭に~があるとプレースホルダーしない。
            } else if(ereg("^~", $val)) {
                $strval .= ereg_replace("^~", "", $val);
            } else {
                $strval .= '?,';
                if($val != ""){
                    $arrval[] = $val;
                } else {
                    $arrval[] = NULL;
                }
            }
            $find = true;
        }
        if(!$find) {
            return false;
        }
        // 文末の","を削除
        $strcol = ereg_replace(",$","",$strcol);
        // 文末の","を削除
        $strval = ereg_replace(",$","",$strval);
        $sqlin = "INSERT INTO $table(" . $strcol. ") VALUES (" . $strval . ")";

        // INSERT文の実行
        $ret = $this->conn->query($sqlin, $arrval);

        return $ret;
    }

    // INSERT文の生成・実行
    // $table   :テーブル名
    // $sqlval  :列名 => 値の格納されたハッシュ配列
    function fast_insert($table, $sqlval) {
        $strcol = '';
        $strval = '';
        $find = false;

        foreach ($sqlval as $key => $val) {
                $strcol .= $key . ',';
                if($val != ""){
                    $eval = pg_escape_string($val);
                    $strval .= "'$eval',";
                } else {
                    $strval .= "NULL,";
                }
                $find = true;
        }
        if(!$find) {
            return false;
        }
        // 文末の","を削除
        $strcol = ereg_replace(",$","",$strcol);
        // 文末の","を削除
        $strval = ereg_replace(",$","",$strval);
        $sqlin = "INSERT INTO $table(" . $strcol. ") VALUES (" . $strval . ")";

        // INSERT文の実行
        $ret = $this->conn->query($sqlin);

        return $ret;
    }


    // UPDATE文の生成・実行
    // $table   :テーブル名
    // $sqlval  :列名 => 値の格納されたハッシュ配列
    // $where   :WHERE文字列
    function update($table, $sqlval, $where = "", $arradd = "", $addcol = "") {
        $strcol = '';
        $strval = '';
        $find = false;
        foreach ($sqlval as $key => $val) {
            if(eregi("^Now\(\)$", $val)) {
                $strcol .= $key . '= Now(),';
            // 先頭に~があるとプレースホルダーしない。
            } else if(ereg("^~", $val)) {
                $strcol .= $key . "=" . ereg_replace("^~", "", $val) . ",";
            } else {
                $strcol .= $key . '= ?,';
                if($val != ""){
                    $arrval[] = $val;
                } else {
                    $arrval[] = NULL;
                }
            }
            $find = true;
        }
        if(!$find) {
            return false;
        }

        if($addcol != "") {
            foreach($addcol as $key => $val) {
                $strcol .= "$key = $val,";
            }
        }

        // 文末の","を削除
        $strcol = ereg_replace(",$","",$strcol);
        // 文末の","を削除
        $strval = ereg_replace(",$","",$strval);

        if($where != "") {
            $sqlup = "UPDATE $table SET $strcol WHERE $where";
        } else {
            $sqlup = "UPDATE $table SET $strcol";
        }

        if(is_array($arradd)) {
            // プレースホルダー用に配列を追加
            foreach($arradd as $val) {
                $arrval[] = $val;
            }
        }

        // INSERT文の実行
        $ret = $this->conn->query($sqlup, $arrval);
        return $ret;
    }

    // MAX文の実行
    function max($table, $col, $where = "", $arrval = array()) {
        if(strlen($where) <= 0) {
            $sqlse = "SELECT MAX($col) FROM $table";
        } else {
            $sqlse = "SELECT MAX($col) FROM $table WHERE $where";
        }
        // MAX文の実行
        $ret = $this->conn->getOne($sqlse, $arrval);
        return $ret;
    }

    // MIN文の実行
    function min($table, $col, $where = "", $arrval = array()) {
        if(strlen($where) <= 0) {
            $sqlse = "SELECT MIN($col) FROM $table";
        } else {
            $sqlse = "SELECT MIN($col) FROM $table WHERE $where";
        }
        // MIN文の実行
        $ret = $this->conn->getOne($sqlse, $arrval);
        return $ret;
    }

    // 特定のカラムの値を取得
    function get($table, $col, $where = "", $arrval = array()) {
        if(strlen($where) <= 0) {
            $sqlse = "SELECT $col FROM $table";
        } else {
            $sqlse = "SELECT $col FROM $table WHERE $where";
        }
        // SQL文の実行
        $ret = $this->conn->getOne($sqlse, $arrval);
        return $ret;
    }

    function getone($sql, $arrval = array()) {
        // SQL文の実行
        $ret = $this->conn->getOne($sql, $arrval);
        return $ret;

    }

    // 一行を取得
    function getrow($table, $col, $where = "", $arrval = array()) {
        if(strlen($where) <= 0) {
            $sqlse = "SELECT $col FROM $table";
        } else {
            $sqlse = "SELECT $col FROM $table WHERE $where";
        }
        // SQL文の実行
        $ret = $this->conn->getRow($sqlse, $arrval);

        return $ret;
    }

    // 1列取得
    function getCol($table, $col, $where = "", $arrval = array()) {
        if (strlen($where) <= 0) {
            $sqlse = "SELECT $col FROM $table";
        } else {
            $sqlse = "SELECT $col FROM $table WHERE $where";
        }
        // SQL文の実行
        return $this->conn->getCol($sqlse, $col, $arrval);
    }

    // レコードの削除
    function delete($table, $where = "", $arrval = array()) {
        if(strlen($where) <= 0) {
            $sqlde = "DELETE FROM $table";
        } else {
            $sqlde = "DELETE FROM $table WHERE $where";
        }
        $ret = $this->conn->query($sqlde, $arrval);
        return $ret;
    }

    function nextval($table, $colname) {
        $sql = "";
        // postgresqlとmysqlとで処理を分ける
        if (DB_TYPE == "pgsql") {
            $seqtable = $table . "_" . $colname . "_seq";
            $sql = "SELECT NEXTVAL('$seqtable')";
        }else if (DB_TYPE == "mysql") {
            $sql = "SELECT last_insert_id();";
        }
        $ret = $this->conn->getOne($sql);

        return $ret;
    }

    function currval($table, $colname) {
        $sql = "";
        if (DB_TYPE == "pgsql") {
            $seqtable = $table . "_" . $colname . "_seq";
            $sql = "SELECT CURRVAL('$seqtable')";
        }else if (DB_TYPE == "mysql") {
            $sql = "SELECT last_insert_id();";
        }
        $ret = $this->conn->getOne($sql);

        return $ret;
    }

    function setval($table, $colname, $data) {
        $sql = "";
        if (DB_TYPE == "pgsql") {
            $seqtable = $table . "_" . $colname . "_seq";
            $sql = "SELECT SETVAL('$seqtable', $data)";
            $ret = $this->conn->getOne($sql);
        }else if (DB_TYPE == "mysql") {
            $sql = "ALTER TABLE $table AUTO_INCREMENT=$data";
            $ret = $this->conn->query($sql);
        }

        return $ret;
    }

    function query($n ,$arr = "", $ignore_err = false){
        $result = $this->conn->query($n, $arr, $ignore_err);
        return $result;
    }

    // auto_incrementを取得する
    function get_auto_increment($table_name){
        // ロックする
        $this->query("LOCK TABLES $table_name WRITE");

        // 次のIncrementを取得
        $arrRet = $this->getAll("SHOW TABLE STATUS LIKE ?", array($table_name));
        $auto_inc_no = $arrRet[0]["Auto_increment"];

        // 値をカウントアップしておく
        $this->conn->query("ALTER TABLE $table_name AUTO_INCREMENT=?" , $auto_inc_no + 1);

        // 解除する
        $this->query('UNLOCK TABLES');

        return $auto_inc_no;
    }
}


$objDbConn = "";

/**
 * コネクションを取得する.
 *
 * (EC-CUBE からの移植)
 */
class SC_DbConn{

    var $conn;
    var $dump;
    var $result;
    var $includePath;
    var $error_mail_to;
    var $error_mail_title;
    var $dsn;
    var $err_disp = true;
    var $dbFactory;


    // コンストラクタ
    function SC_DbConn($dsn = "", $err_disp = true, $new = false){

        // Debugモード指定
        $options['debug'] = true;
        // 既に接続されていないか、新規接続要望の場合は接続する。
        if(!isset($objDbConn->connection) || $new) {
            if($dsn != "") {
                $objDbConn = DB::connect($dsn, $options);
                $this->dsn = $dsn;
            } else {
                if(defined('DEFAULT_DSN')) {
                    $objDbConn = DB::connect(DEFAULT_DSN, $options);
                    $this->dsn = DEFAULT_DSN;
                } else {
                    return;
                }
            }
            if(DB::isError($objDbConn)) {
                die($objDbConn->getMessage());
            } else {
                $objDbConn->query("SET NAMES 'utf8'");
            }
        }

        $this->conn = $objDbConn;
        $this->error_mail_to = DB_ERROR_MAIL_TO;
        $this->error_mail_title = DB_ERROR_MAIL_SUBJECT;
        $this->err_disp = $err_disp;
    }

    // クエリの実行
    function query($n ,$arr = "", $ignore_err = false){

        if ( $arr ) {
            $result = $this->conn->query($n, $arr);
        } else {
            $result = $this->conn->query($n);
        }

        if ($this->conn->isError($result) && !$ignore_err){
            $this->send_err_mail ($result, $n);
        }

        $this->result = $result;
        return $this->result;
    }

    // 一件のみ取得
    function getOne($n, $arr = ""){

        if ( $arr ) {
            $result = $this->conn->getOne($n, $arr);
        } else {
            $result = $this->conn->getOne($n);
        }
        if ($this->conn->isError($result)){
            $this->send_err_mail ($result ,$n);
        }
        $this->result = $result;

        return $this->result;
    }

    function getRow($n, $arr = ""){

        if ( $arr ) {
            $result = $this->conn->getRow($n, $arr);
        } else {
            $result = $this->conn->getRow($n);
        }
        if ($this->conn->isError($result)){
            $this->send_err_mail ($result ,$n);
        }
        $this->result = $result;
        return $this->result;
    }

    function getCol($n, $col, $arr = "") {

        if ($arr) {
            $result = $this->conn->getCol($n, $col, $arr);
        } else {
            $result = $this->conn->getCol($n, $col);
        }
        if ($this->conn->isError($result)) {
            $this->send_err_mail($result, $n);
        }
        $this->result = $result;
        return $this->result;
    }

    // SELECT文の実行結果を全て取得
    function getAll($n, $arr = ""){

        if(PEAR::isError($this->conn)) {
            if(ADMIN_MODE){
                SC_Utils_Ex::sfErrorHeader("DBへの接続に失敗しました。:" . $this->dsn);
            }else{
                SC_Utils_Ex::sfErrorHeader("DBへの接続に失敗しました。:");
            }
            return 0;
        }

        if ( $arr ){
            $result = $this->conn->getAll($n, $arr, DB_FETCHMODE_ASSOC);
        } else {
            $result = $this->conn->getAll($n, DB_FETCHMODE_ASSOC);
        }

        if ($this->conn->isError($result)){
            $this->send_err_mail ($result, $n);
        }
        $this->result = $result;

        return $this->result;
    }

    function autoExecute($table_name, $fields_values, $sql_where = null){

        if ( $sql_where ) {
            $result = $this->conn->autoExecute( $table_name, $fields_values, DB_AUTOQUERY_UPDATE, $sql_where);
        } else {
            $result = $this->conn->autoExecute( $table_name, $fields_values, DB_AUTOQUERY_INSERT);
        }

        if ($this->conn->isError($result)){
            $this->send_err_mail ($result, $n);
        }
        $this->result = $result;
        return $this->result;
    }


    function prepare($n){
        global $sql;
        $sql = $n;
        $result = $this->conn->prepare($n);
        $this->result = $result;
        return $this->result;
    }

    function execute($n, $obj){
        global $sql;
        $sql = $n;
        $result = $this->conn->execute($n, $obj);
        $this->result = $result;
        return $this->result;
    }

    function reset(){
        $this->conn->disconnect();
    }

    function send_err_mail($result, $sql){
        $url = $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI'];

        $errmsg = $url."\n\n";
        $errmsg.= "SERVER_ADDR:" . $_SERVER['SERVER_ADDR'] . "\n";
        $errmsg.= "REMOTE_ADDR:" . $_SERVER['REMOTE_ADDR'] . "\n";
        $errmsg.= "USER_AGENT:" . $_SERVER['HTTP_USER_AGENT'] . "\n\n";
        $errmsg.= $sql . "\n";
        $errmsg.= $result->message . "\n\n";
        $errmsg.= $result->userinfo . "\n\n";

        $arrRbacktrace = array_reverse($result->backtrace);

        foreach($arrRbacktrace as $backtrace) {
            if($backtrace['class'] != "") {
                $func = $backtrace['class'] . "->" . $backtrace['function'];
            } else {
                $func = $backtrace['function'];
            }

            $errmsg.= $backtrace['file'] . " " . $backtrace['line'] . ":" . $func . "\n";
        }

        print('<pre>');
        //print_r(htmlspecialchars($errmsg, ENT_QUOTES));
        print_r($errmsg);
        print('</pre>');
        exit();
    }

}

?>


xampplite-1.7.3とeccube-2.4.3で試したので、多分大丈夫だと思います。

 C:\xampp\htdocs\eccube\html...
というようにeccubeを置いているとしたら

 C:\xampp\htdocs\eccube\create-eccube-data.php
に上記コードのファイルを置いて

コマンドプロンプトから

 cd \
 cd xampp\htdocs\eccube
 c:\xampp\php\php create-eccube-data.php

とコマンドし、終わったらeccubeの管理画面から商品ひとつを呼び出して、再登録して完了です。
フラット表示 前のトピック | 次のトピック


題名 投稿者 日時
   テストデータ生成スクリプトについて ramrun 2008/2/12 13:05
     Re: テストデータ生成スクリプトについて nanasess 2008/2/14 10:56
     Re: テストデータ生成スクリプトについて hoge 2008/6/16 2:04
       Re: テストデータ生成スクリプトについて seasoft 2008/6/16 3:30
         Re: テストデータ生成スクリプトについて nanasess 2008/6/16 9:16
           Re: テストデータ生成スクリプトについて hoge 2008/6/16 10:15
             Re: テストデータ生成スクリプトについて seasoft 2008/6/16 12:46
             Re: テストデータ生成スクリプトについて nanasess 2008/6/18 0:49
     Re: テストデータ生成スクリプトについて forthety 2010/2/9 16:03
       Re: テストデータ生成スクリプトについて AMUAMU 2010/2/9 16:24
         Re: テストデータ生成スクリプトについて forthety 2010/2/9 19:29
         » Re: テストデータ生成スクリプトについて ramrun 2010/2/9 22:56
             Re: テストデータ生成スクリプトについて forthety 2010/2/10 13:08
               Re: テストデータ生成スクリプトについて forthety 2010/2/10 14:38
                 Re: テストデータ生成スクリプトについて ramrun 2010/2/10 16:45
                   Re: テストデータ生成スクリプトについて shutta 2010/8/3 16:54
                     Re: テストデータ生成スクリプトについて tao_s 2013/10/13 7:56
                       Re: テストデータ生成スクリプトについて tao_s 2013/10/13 8:00
       Re: テストデータ生成スクリプトについて nanasess 2010/2/9 16:30

 



ログイン


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

統計情報

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

投稿数ランキング

1
seasoft
7367
2
468
3217
3
AMUAMU
2712
4
nanasess
2314
5
umebius
2085
6
yuh
1819
7
h_tanaka
1646
8
red
1570
9
mcontact
1296
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.