Mysql
 sql >> Datenbank >  >> RDS >> Mysql

PHP-Array in MySQL speichern?

Es gibt kein gut Möglichkeit, ein Array in einem einzelnen Feld zu speichern.

Sie müssen Ihre relationalen Daten untersuchen und die entsprechenden Änderungen an Ihrem Schema vornehmen. Siehe Beispiel unten für einen Verweis auf diesen Ansatz.

Wenn Sie müssen Speichern Sie das Array in einem einzelnen Feld, dann serialize() und unserialize() Funktionen werden den Zweck erfüllen. Sie können jedoch keine Abfragen zum tatsächlichen Inhalt durchführen.

Alternativ zur Serialisierungsfunktion gibt es auch json_encode() und json_decode() .

Betrachten Sie das folgende Array

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

Um es in der Datenbank zu speichern, müssen Sie eine Tabelle wie diese erstellen

$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)
    )');

Um mit den Datensätzen zu arbeiten, können Sie Abfragen wie diese durchführen (und ja, das ist ein Beispiel, Vorsicht!)

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();

Der connect() Funktion gibt eine MySQL-Verbindungsressource zurück

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