Bir veritabanı bir Array ve Keys kurtarmak için etkili bir yoldur

3 Cevap php

Ben bir veritabanına değişkenler çok kurtarmaya çalışıyorum ve artık gülünç oluyor. PHP ve MySQL kullanıyorum.

Bir yolu var mı, ben yeni bir değişken ve tablo sütun çifti eklemek zorunda kalmadan dizi değeri ve tek seferde dizi anahtarları (Dizi anahtarları tablo sütun / alan adları tam olarak aynıdır) alabilirsiniz.

Dürüst olmak gerekirse, ben sadece sadece, geri kalanı benim için kurulum SQL String inşa ile yardıma ihtiyacım var.

Ben yeni bir değişken saklamak zorunda ben veritabanı tablosuna yeni bir sütun ekleyebilirsiniz.

Herhangi bir yardım için teşekkür ederiz

3 Cevap

Eğer diziden bir SQL sorgusu oluşturmak istiyorsanız, bu yardımcı olabilir:

// Sample array
$array = array(
             'key1' => 'value1',
             'key2' => 'value2'
             ...
             'key10' => 'value10'
         );

// Get and escape the keys
$keys = array_map('mysql_real_escape_string', array_keys($array));
// Escape the values
$array = array_map('mysql_real_escape_string', $array);
// Build query
$query = "INSERT INTO table(`".implode('`, `', $keys)."`) VALUES('".implode("', '", $array)."')";

mysql_query($query);

Bu durumda, sorgu bu gibi bir şey olacaktır:

INSERT INTO
    table(`key1`, `key2` ... `key10`)
VALUES
    ('value1', 'value2' ... 'value10')

Eğer çok boyutlu bir dizi (diziler dizisi) varsa aşağıdaki gibi bir sorgu oluşturabilirsiniz:

// Sample multidimensional array
$array = array(
             array('key1' => 'value1', 'key2' => 'value2'),
             array('key1' => 'value3', 'key2' => 'value4'),
             array('key1' => 'value5', 'key2' => 'value6')
         );

// Get and escape the keys
$keys = array_map('mysql_real_escape_string', array_keys(current($array)));
// Array to store values for the query
$values = array();
// Loop every row and insert into $values array
foreach($array as $row) {
    // Escape all items
    array_map('mysql_real_escape_string', $row);
    $values[] = "('".implode("', '", $row)."')";
}

$query = "INSERT INTO table(`".implode('`, `', $keys)."`) VALUES ".implode(', ', $values);

mysql_query($query);

Ve bu durumda, sonuçta elde edilen sorgu böyle bir şey olacaktır:

INSERT INTO
    table(`key1`, `key2`)
VALUES
    ('value1', 'value2'),
    ('value3', 'value4'),
    ('value5', 'value6')

Şimdi tek şey veritabanına karşılık gelen sütunları yaratıyor endişelenmenize gerek.

Serialize the data and write it to a single field in one table. Then to retrieve the data unserialize it and you are left with an array.

<?php
$array = array("hello", "world");
$serialized = serialize($array);

// -> Then write $serialized to database
?>

Almak için

<?php      
// -> First Get $serialized from database

$array = unserialize($serialized);
?>

Siz veritabanında seçenekleri tefrika dizi depolamak deneyebilirsiniz. örneğin, ikinci: http://us3.php.net/manual/en/function.serialize.php.

<?php
// $session_data contains a multi-dimensional array with session
// information for the current user.  We use serialize() to store
// it in a database at the end of the request.

$conn = odbc_connect("webdb", "php", "chicken");
$stmt = odbc_prepare($conn,
      "UPDATE sessions SET data = ? WHERE id = ?");
$sqldata = array (serialize($session_data), $_SERVER['PHP_AUTH_USER']);
if (!odbc_execute($stmt, $sqldata)) {
    $stmt = odbc_prepare($conn,
     "INSERT INTO sessions (id, data) VALUES(?, ?)");
    if (!odbc_execute($stmt, $sqldata)) {
        /* Something went wrong.. */
    }
}
?>