Forum Webscript.Ru
Программирование => PHP => Тема начата: slash2k от 27 Августа 2005, 17:26:35
-
Есть массив.
$arr[1] = "Груши"
$arr[2] = "Яблоки"
$arr[3] = "Апельсины"
Мне нужно вставить в базу данных в поле items этот самый массив. Делаю так:
$arr = print_r($arr);
$sql = "INSERT INTO my_table (items) values (\'$arr\')";
$result = mysql_query ($sql);
Но вот когда делаю запрос на этот массив из БД:
$sql = "SELECT * FROM my_table WHERE id=1"
$result = mysql_query ($sql);
$row = mysql_fetch_array($result);
$arr = $row[\'items\'];
У меня получается, что преременная $arr уже не массив а строка.
Как сделать чтобы это был массив?
-
очевидно нужно сделать цикл с количеством итераций равным количеству элементов массива, а затем в этот же цикл засунуть запрос к базе, который будет по очередности брать элемент массива и заталдыкивать его в бтаблицу
-
slash2k
Вроде так можно...
function insert($arr){
global $db;
$string = implode("|||", $arr);//Array to string
$result = $db->sql_query("INSERT INTO my_table (items) values (\'$string\')");
if(!$result) $db->sql_error();
}
function select($id){
global $db;
$result = $db->sql_query("SELECT * FROM my_table WHERE id=\'$id\'");
if(!$result) $db->sql_error();
$string = $db->sql_fetchrow($result);
$arr = explode("|||", $string);//String to array
return $arr;
}
-
hoblin
что за бред ты тут написал?
не можешь базу данных от файла со счётными палочками отличить?
как привык копошиться с палочками в файле - то же самое и в БД пихаешь?
мало того, что сам не умеешь - так ещё и советы давать другим лезешь
-
если я правильно понял суть проблемы, то можно использовать serialize при записи в таблицу и unserialize при выборке, что бы получить обратно иходный массив.
-
slash2k
твоя поблема в непонимании такого понятия как "типы данных".
В пхп есть такой тип данных как массив.
В mysql нет такого типа данных как массив, поэтому просто так записать массив в mysql нельзя.
Есть разные пути решения этой задачи, но они зависят от того, как будут использоваться данные массива в дальнейшем
-
slash2k
[off]И свои пять копеек, не претендуя на оригинальность[/off]
1. Правильно: для каждого элемента массива делать запись в базу. Соответственно, при помощи отдельного запроса.
2. Некорректно, но может пригодиться: записывать массив в поле БД как serialize($array) - как строку. При выводе делать unserialize.
-
Спасибо огромное! Наверное попробую с serialize, т.к кол-во элементов массива динамическое.
-
и от меня спасибы. Завтра же перепишу implode на serialize :)