массив array записать в MySQL

Статус
В этой теме нельзя размещать новые ответы.
Я использую следующие функции для записи массива в таблицу mysql:

PHP:
function db_connect($server = DB_SERVER, $username = DB_USER, $password = DB_PASS, $database = DB_NAME, $link = 'db_link') {
  global $$link;
  if (USE_PCONNECT == 'true') {
    $$link = mysql_pconnect($server, $username, $password);
  } else {
    $$link = mysql_connect($server, $username, $password);
  }
  if ($$link) mysql_select_db($database);
  return $$link;
}

function db_array_to_mysql($table, $data, $action = 'insert', $parameters = '', $link = 'db_link') {
  global $$link;
  reset($data);
  if ($action == 'insert') {
    $query = 'insert into ' . $table . ' (';
    while (list($columns, ) = each($data)) {
      $query .= $columns . ', ';
    }
    $query = substr($query, 0, -2) . ') values (';
    reset($data);
    while (list(, $value) = each($data)) {
      switch ((string)$value) {
        case 'now()':
          $query .= 'now(), ';
          break;
        case 'null':
          $query .= 'null, ';
          break;
        default:
          $query .= '\'' . addslashes($value) . '\', ';
          break;
      }
    }
    $query = substr($query, 0, -2) . ')';
  } elseif ($action == 'update') {
    $query = 'update ' . $table . ' set ';
    while (list($columns, $value) = each($data)) {
      switch ((string)$value) {
        case 'now()':
          $query .= $columns . ' = now(), ';
          break;
        case 'null':
          $query .= $columns .= ' = null, ';
          break;
        default:
          $query .= $columns . ' = \'' . addslashes($value) . '\', ';
          break;
      }
    }
    $query = substr($query, 0, -2) . ' where ' . $parameters;
  }
  return mysql_query($query, $$link);
}

Примеры использования.

Добавление строки в таблицу. В таблицу будет вставлена строка, и поля будут заполнены соответствующими значениями из ассоциативного массива.

PHP:
db_connect();
$sql_data_array['name'] = 'megachange';
$sql_data_array['wmz_wmr'] = $wmz_wmr;
$sql_data_array['wmz_wme'] = $wmz_wme;
$sql_data_array['wmz_wmu'] = $wmz_wmu;
db_array_to_mysql('table_exchange', $sql_data_array);

Изменение строки в таблице. Будет изменена строка (или строки), содержащая в поле name значение 'globoxchange'. Поля будут заполнены соответствующими значениями из ассоциативного массива.

PHP:
db_connect();
$sql_data_array['wmz_wmr'] = $wmz_wmr;
$sql_data_array['wmz_wme'] = $wmz_wme;
$sql_data_array['wmz_wmu'] = $wmz_wmu;
db_array_to_mysql('table_exchange', $sql_data_array, 'update', "name = 'globoxchange'");
 
Прекратите заниматься извращениями :D
Чтоб сохранить массив в базе достаточно его сериализовать.
После извлечения из базы делаем обратную процедуру и имеем свой массив.

1. В данном случае лишаемся возможности просмотреть значения массива через СУБД. То есть без скрипта значения элементов массива не посмотреть.

2. К моему предыдущему посту
В вырожденном случае таблица будет иметь единственную запись, содержащую элементы массива.
Если уж представлять массивы с СУБД, то в случае одно-двух "важных" массивов (небольшого количества массивов) можно под каждый массив завести свою таблицу. Два столбца: name и value. Первое поле ключевое, индекс массива. Второе - значение массива. Искать, удалять, редактировать в таком массиве можно средствами СУБД.
 
Если уж представлять массивы с СУБД, то в случае одно-двух "важных" массивов (небольшого количества массивов) можно под каждый массив завести свою таблицу. Два столбца: name и value. Первое поле ключевое, индекс массива. Второе - значение массива. Искать, удалять, редактировать в таком массиве можно средствами СУБД.
А если массив многомерный?

В данном случае лишаемся возможности просмотреть значения массива через СУБД. То есть без скрипта значения элементов массива не посмотреть.
Повторюсь ещё раз - если нужна полноценная работа с массивом (просмотр/изменение/поиск), необходимо использовать СУБД, которые это позволяют.
Оперировать массивами при помощи мускула - частные горбыли.
 
Допустим, имеется массив
array ("globoxchange"=array ($wmz_wmr,$wmz_wme,$wmz_wmu),
"megachange"=array ($wmz_wmr,$wmz_wme,$wmz_wmu));

Для получения из MySQL массива есть функции, например mysql_fetch_array(), а есть ли обратные функции? Чтобы имеющийся массив записать в БД?

Условия задачи представлены не совсем четко. Очевидно лишь желание записать массив в БД. Не ясно, меняется ли размерность массива, ассоциативный он или нет. Видимо , имеется ввиду следующий синтаксис:

PHP:
$aGloboxchange = array($wmz_wmr,$wmz_wme,$wmz_wmu);
$aMegachange = array ($wmz_wmr,$wmz_wme,$wmz_wmu);

но это только догадки. Чем более четко поставлена задача, тем легче получить точный ответ. Да и самому иногда становится понятно решение, если вопрос ясно сформулирован. Выше в теме я предложил вариант решения. когда в программе данные удобнее хранить в ассоциативном массиме, структура которого отражена и в структуре базы. Чтобы не городить sql-запрос каждый раз самому, можно использовать промежуточную функцию.
 
А если массив многомерный?
Многомерный массив - это массив, каждый элемент которого тоже массив. :) Двумя таблицами можно представить массив любой размерности, в том числе с древовидной структурой.
 
Пишу мониторинг обменников. Получаю курс валют из файла экспорта.

Пример экспорта:
Код:
WMR -> WMR: rate=1.0204081632653, reserve=14970.07
WMR -> WMZ: rate=36.320537634409, reserve=9467.29 
WMR -> WME: rate=46.841368421053, reserve=22.18 
WMR -> WMU: rate=4.2516262626263, reserve=1.4 
WMR -> WMY: rate=0.023647272727273, reserve=1555339.87

Делаю парс значения, с записью в массив, далее командой list() создаю переменную каждому (или выборочно) элементу массива.
PHP:
function savechange()
{
/////////http://www.savechange.ru/index.php/////////

$_url = 'http://www.savechange.ru/savechange_c.php';

   $ch = curl_init();

   curl_setopt($ch, CURLOPT_POST,1);
   curl_setopt($ch, CURLOPT_URL,$_url);
   curl_setopt($ch, CURLOPT_RETURNTRANSFER,1);
   $content = curl_exec ($ch);

   curl_close ($ch);   
    
/////
unset ($cur_arr);
unset ($curs_arr);
////
preg_match_all("/rate=([\.0-9]*)/", $content, $cur_arr);

foreach ($cur_arr[1] as $num=>$item)
	{   
	if (isset($item))
		{
		$item=round($item, 3);
		$curs_arr[$num]=$item;
		}
	}
list(,,,$wmz_wme,$wmz_wmr,$wmz_wmu,$wmz_wmb,$wme_wmz,,$wme_wmr,$wme_wmu,$wme_wmb,$wmr_wmz,$wmr_wme,,$wmr_wmu,$wmr_wmb,$wmu_wmz,$wmu_wme,$wmu_wmr,,$wmu_wmb,$wmb_wmz,$wmb_wme,$wmb_wmr,$wmb_wmu) = ($curs_arr);

	
}

Создала БД: Обменник----wmz_wmr,wmr_wmz, и т.д.
Таких обменников несколько.
Теперь думаю, как занести переменную в нужное поле таблицы.
 
может я что то не понимаю, но чем не устраивает
PHP:
INSERT INTO TBL_NAME (
`field1` ,
`field2` 
)
VALUES (
'val_1', 'val_2'
);
?
 
...
Создала БД: Обменник----wmz_wmr,wmr_wmz, и т.д.
Таких обменников несколько.
Теперь думаю, как занести переменную в нужное поле таблицы.

А так понял вам необходимо выяснить в какой именно обменник заносить значения?
А есть ли у обменников какие-то различия?

Если обменники находятся по разным ссылкам (к примеру один тут: Для просмотра ссылки Войди или Зарегистрируйся, другой по другому адресу), то проще будет хранить урл обменника и относительно этого урл по ID обменника заносить данные.
 
Статус
В этой теме нельзя размещать новые ответы.
Назад
Сверху