sql >> データベース >  >> RDS >> Mysql

PHPアレイをMySQLに保存しますか?

    良いはありません 配列を単一のフィールドに格納する方法。

    リレーショナルデータを調べて、スキーマに適切な変更を加える必要があります。このアプローチのリファレンスについては、以下の例を参照してください。

    必須の場合 配列を単一のフィールドに保存してから、 serialize() および unserialize() 関数がそのトリックを行います。ただし、実際のコンテンツに対してクエリを実行することはできません。

    シリアル化機能の代わりに、 json_encode() および json_decode()

    次の配列を検討してください

    $a = array(
        1 => array(
            'a' => 1,
            'b' => 2,
            'c' => 3
        ),
        2 => array(
            'a' => 1,
            'b' => 2,
            'c' => 3
        ),
    );
    

    データベースに保存するには、次のようなテーブルを作成する必要があります

    $c = mysql_connect($server, $username, $password);
    mysql_select_db('test');
    $r = mysql_query(
        'DROP TABLE IF EXISTS test');
    $r = mysql_query(
        'CREATE TABLE test (
          id INTEGER UNSIGNED NOT NULL,
          a INTEGER UNSIGNED NOT NULL,
          b INTEGER UNSIGNED NOT NULL,
          c INTEGER UNSIGNED NOT NULL,
          PRIMARY KEY (id)
        )');
    

    レコードを操作するには、次のようなクエリを実行できます(もちろん、これは例です。注意してください)

    function getTest() {
        $ret = array();
        $c = connect();
        $query = 'SELECT * FROM test';
        $r = mysql_query($query,$c);
        while ($o = mysql_fetch_array($r,MYSQL_ASSOC)) {
            $ret[array_shift($o)] = $o;
        }
        mysql_close($c);
        return $ret;
    }
    function putTest($t) {
        $c = connect();
        foreach ($t as $k => $v) {
            $query = "INSERT INTO test (id,".
                    implode(',',array_keys($v)).
                    ") VALUES ($k,".
                    implode(',',$v).
                ")";
            $r = mysql_query($query,$c);
        }
        mysql_close($c);
    }
    
    putTest($a);
    $b = getTest();
    

    connect() 関数はmysql接続リソースを返します

    function connect() {
        $c = mysql_connect($server, $username, $password);
        mysql_select_db('test');
        return $c;
    }
    


    1. バックアップなしでSQLServer2012で削除されたテーブルを回復する方法を知っている

    2. ダウンタイムなしでPostgreSQL10をPostgreSQL11にアップグレードする方法

    3. 新しいDBシステムを学ぶことの利点

    4. 結果として完全な日時値を使用してSQLServerの1時間あたりの行数をカウントします