2010-01-04 77 views
5

我想將大量變量保存到數據庫中,現在變得很荒謬。我正在使用PHP和MySQL。一種將數組及其鍵值保存到數據庫的有效方法

有沒有辦法,我可以一次性獲得數組值和數組鍵(數組鍵與表列/字段名稱完全相同),而無需添加新變量和表列對。

說實話,我只需要幫助構建SQL字符串,其餘的是爲我設置的。

當我必須存儲新變量時,我可以將新列添加到數據庫表中。

感謝所有的幫助

回答

7

如果你想創建一個從你的陣列SQL查詢,這可能幫助:

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

在這種情況下,查詢將是這個樣子:

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

如果您有一個多維數組(數組數組),您可以創建一個查詢,如下所示:

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

在這種情況下,生成的查詢會是這樣的:你不必擔心被創建相應的列到數據庫

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

現在唯一的事情。

+0

真棒!謝謝塔圖 - 那就是我正在尋找的東西,我只是太小心翼翼地把它拉下來! :) – Abs 2010-01-04 19:48:21

1

你可以嘗試存儲在數據庫中選擇一個序列化的陣列。例如,來自: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.. */ 
    } 
} 
?> 
2

序列化數據並將其寫入一個表中的單個字段。 然後檢索數據反序列化它,你留下一個數組。

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

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

要檢索

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

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

+1我最近自己學了這個技巧,挺方便的。 – Erik 2010-01-04 20:02:22

+0

當我嘗試製作一個可以隨時由管理員更改的表單時,我想到了這種方法。所以這是最簡單的方法,而不會在管理員更改表單時混淆以前的條目。 – Chaim 2010-01-05 07:36:14

+0

不是推薦的方式,因爲它使插入的值無法查詢。 – 2011-07-21 08:42:03

相關問題