2010-01-04 4 views
5

Bir veritabanına çok sayıda değişken kaydetmeye çalışıyorum ve şu anda gülünç oluyor. PHP ve MySQL kullanıyorum.Bir Veritabanını ve Anahtarlarını bir veritabanına kaydetmenin etkili bir yolu

Bir yol var mı, yeni bir değişken ve tablo sütun çifti eklemek zorunda kalmadan dizi değerini ve dizi anahtarlarını (dizi değerleri tablonun sütun/alan adları ile tam olarak aynı) bir seferde alabilirim.

Dürüst olmak gerekirse, yalnızca SQL dizgisi oluşturmayla ilgili yardıma ihtiyacım var, gerisi benim için ayarlandı.

Yeni bir değişken depolamak zorunda kaldığımda yeni sütunu veritabanı tablosuna ekleyebilirim. Bütün herhangi bir yardım

cevap

7

, bu yardımcı olabilir:

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

: Bu durumda
// 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); 

, sorgu böyle bir şey olmazdı

Çok boyutlu bir diziniz varsa (dizi dizisi) aşağıdaki gibi bir sorgu oluşturabilirsiniz:

Eğer veritabanına karşılık gelen sütunları oluşturuyor endişelenmenize gerek

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

Şimdi tek şey:

// 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, çıkan sorgu böyle bir şey olurdu.

+0

Müthiş almak için! Teşekkürler Tatu - tam olarak aradığım şey, onu kendim çıkarmak için çok nooby'im! :) – Abs

1

Sen veritabanında seçeneklerin tefrika dizi depolamak deneyebilirsiniz için

teşekkürler. örneğin, http://us3.php.net/manual/en/function.serialize.php'dan. Eğer diziden bir SQL sorgusu oluşturmak istiyorsanız

<?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.. */ 
    } 
} 
?> 
2

Verileri seri hale getirin ve bir tabloda tek bir alana yazın. Ardından veriyi geri almak için sıraya dizilemez ve bir diziyle kalırsınız.

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

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

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

$array = unserialize($serialized); 
?> 
+0

+1 Bu hileyi çok yakın bir zamanda öğrendim, oldukça kullanışlı. – Erik

+0

Bu yöntem, yönetici tarafından herhangi bir zamanda değiştirilebilecek bir form oluşturmaya çalıştığımda düşündüm. Bu, yönetici formu değiştirdiğinde önceki girişlerle uğraşmadan en kolay yöntemdi. – Chaim

+0

Önerilen değerler, girilen değerleri geçerli olmaz hale getirmediğinden, önerilen bir yöntem değildir. –