2

誰か助けてくれないかと思っていました。

私はCodeIgniterで移行を使い始めたばかりですが、SQLを移行に変換する方法を理解しようとして問題があります。

このSQLを移行に変換して、それがどのように行われるかを確認できる人はいますか?

私が持っているSQLは次のとおりです。

CREATE TABLE IF NOT EXISTS `ci_sessions` (
  `session_id` varchar(40) COLLATE utf8_bin NOT NULL DEFAULT '0',
  `ip_address` varchar(16) COLLATE utf8_bin NOT NULL DEFAULT '0',
  `user_agent` varchar(150) COLLATE utf8_bin NOT NULL,
  `last_activity` int(10) unsigned NOT NULL DEFAULT '0',
  `user_data` text COLLATE utf8_bin NOT NULL,
  PRIMARY KEY (`session_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin;
4

2 に答える 2

3

こちらのドキュメントをお読みください:

CodeIgniterの移行

基本的に、CodeIgniterdbforgeクラスを使用してテーブルを作成する必要があります。上記のコードを使用する:

    $this->dbforge->add_field(array(
        'session_id' => array(
            'type' => 'VARCHAR',
            'constraint' => '40'
        ),
        'ip_address' => array(
            'type' => 'VARCHAR',
            'constraint' => '16'
        ),
        'user_agent' => array(
            'type' => 'VARCHAR',
            'constraint' => '150'
        ),
        'last_activity' => array(
            'type' => 'INT',
            'constraint' => '10'
        ),
        'user_data' => array(
            'type' => 'TEXT'
        )
    ));

    $this->dbforge->add_key('session_id', TRUE);
    $this->dbforge->create_table('ci_sessions');

dbforgeクラスに関するドキュメントはここにあります:

ellislab.com/codeigniter/user-guide/database/forge.html

注:ただし、CIセッションテーブルをいじることはお勧めしません。

于 2012-09-26T16:47:16.063 に答える
3

「安全」であることがわかっている大きなSQLクエリのブロックがあり、時間を節約したい場合にも、これを簡単に行うことができます(私の意見では、テーブルの複雑さとエラーが発生する可能性に基づく判断の呼び出しです)生のSQLを配列に変換する場合-結局のところ、移行ではすべてがハードコーディングされており、SQLインジェクションなどの可能性について心配する必要はありません)

    $sql = "CREATE TABLE IF NOT EXISTS  `ci_sessions` (
    session_id varchar(40) DEFAULT '0' NOT NULL,
    ip_address varchar(45) DEFAULT '0' NOT NULL,
    user_agent varchar(120) NOT NULL,
    last_activity int(10) unsigned DEFAULT 0 NOT NULL,
    user_data text NOT NULL,
    PRIMARY KEY (session_id),
    KEY `last_activity_idx` (`last_activity`)
)";
    $this->db->query($sql);

ただし、セッションテーブルを移行としてロードすることはお勧めしません。in$config['sess_use_database']の場合、移行URLに移動すると失敗します。これは、Codeigniterが最初にデータベースにセッションエントリを作成しようとするためです。ブラウザとデータベーステーブルはまだ存在しません。config/config.phptrue

A Database Error Occurred
Error Number: 1146
Table 'characterhub.ci_sessions' doesn't exist

したがって、それが機能するためには、あなたまたは移行を実行している人が最初に設定sess_use_databasefalse、次に移行を実行してから、true再び元に戻す必要があります。

于 2012-12-19T22:25:51.287 に答える