Forum Webscript.Ru

Программирование => PHP => Тема начата: slash2k от 27 Августа 2005, 17:26:35

Название: Помогите с массивом
Отправлено: 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 уже не массив а строка.
Как сделать чтобы это был массив?
Название: Помогите с массивом
Отправлено: Greg от 27 Августа 2005, 18:04:37
очевидно нужно сделать цикл с количеством итераций равным количеству элементов массива, а затем в этот же цикл засунуть запрос к базе, который будет по очередности брать элемент массива и заталдыкивать его в бтаблицу
Название: Помогите с массивом
Отправлено: hoblin от 28 Августа 2005, 12:35:53
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;
}
Название: Помогите с массивом
Отправлено: Меняздесьдавнонет от 28 Августа 2005, 13:59:13
hoblin
что за бред ты тут написал?
не можешь базу данных от файла со счётными палочками отличить?
как привык копошиться с палочками в файле - то же самое и в БД пихаешь?
мало того, что сам не умеешь - так ещё и советы давать другим лезешь
Название: Помогите с массивом
Отправлено: Демет от 29 Августа 2005, 12:30:04
если я правильно понял суть проблемы, то можно использовать serialize при записи в таблицу и unserialize при выборке, что бы получить обратно иходный массив.
Название: Помогите с массивом
Отправлено: Макс от 29 Августа 2005, 12:39:27
slash2k
твоя поблема в непонимании такого понятия как "типы данных".
В пхп есть такой тип данных как массив.
В mysql нет такого типа данных как массив, поэтому просто так записать массив в mysql нельзя.

Есть разные пути решения этой задачи, но они зависят от того, как будут использоваться данные массива в дальнейшем
Название: Помогите с массивом
Отправлено: CGVictor от 29 Августа 2005, 13:46:09
slash2k
[off]И свои пять копеек, не претендуя на оригинальность[/off]
1. Правильно: для каждого элемента массива делать запись в базу. Соответственно, при помощи отдельного запроса.
2. Некорректно, но может пригодиться: записывать массив в поле БД как serialize($array) - как строку. При выводе делать unserialize.
Название: Помогите с массивом
Отправлено: slash2k от 31 Августа 2005, 11:58:56
Спасибо огромное! Наверное попробую с serialize, т.к кол-во элементов массива динамическое.
Название: Помогите с массивом
Отправлено: hoblin от 01 Сентября 2005, 18:51:12
и от меня спасибы. Завтра же перепишу implode на serialize :)