- Как хранить массивы в базе данных
- 5 последних уроков рубрики «PHP»
- Фильтрация данных с помощью zend-filter
- Контекстное экранирование с помощью zend-escaper
- Подключение Zend модулей к Expressive
- Совет: отправка информации в Google Analytics через API
- Подборка PHP песочниц
- Php mysql вставка массива
- База данных MySQL
- Вариант 1. Повторяющийся запрос на вставку в каждой строке
- Вариант 2. Один запрос на вставку
- Вариант 3. Сериализованная строка
- Вариант 4. Строка JSON
- How to Store Array in MySQL with PHP
- Contents
- 1. Table structure
- 2. Configuration
- 3. With serialize() and unserialize()
- 4. With implode() and explode()
- 5. With Loop
- 6. Conclusion
Как хранить массивы в базе данных
При работе с базой данных MySQL иногда нужно сохранить массив в одном поле. К сожалению, нет способа непосредственно передать массив как параметр. В результате, хранение таких структур данных становиться более сложным процессом, но, тем не менее, возможным.
Чтобы конвертировать любой массив (или объект) в строку в PHP, нужно вызвать функцию serialize :
$array = array( 1, 2, 3 ); $string = serialize( $array ); echo $string;
$string содержит строчную версию массива. Выше приведенный пример выведет следующее:
Чтобы конвертировать такую строку обратно в массив, надо использовать unserialize :
// $array будет содержать( 1, 2, 3 ) $array = unserialize( $string );
Теперь проведём конвертацию массива из 200 случайно генерированных целых чисел в диапазоне от 1 до 1000:
Пример выведет подобную строку:
Данная строка может быть сохранена в базе данных и конвертирована в массив по мере надобности. Очень часто функция base64_encode используется в сочетании с функцией serialize для хранения массивов:
$string = base64_encode( serialize( $array ) );
Зашифрованная строка может быть восстановлена в массив с помощью функции base64_decode :
$array = unserialize( base64_decode( $string ) );
К сожалению, такие строки могут иметь очень большой размер. В таком случае можно использовать функцию gzcompress для сжатия строки (размер сжатой строки существенно меньше):
$smallString = gzcompress( $string );
Перед использованием, такую строку надо вернуть к обычному виду с помощью функции gzuncompress .
Вот и все, что может пригодиться при решении вопроса хранения массива в базе данных.
Данный урок подготовлен для вас командой сайта ruseller.com
Источник урока: www.lateralcode.com/store-array-database/
Перевел: Сергей Фастунов
Урок создан: 3 Сентября 2010
Просмотров: 97431
Правила перепечатки
5 последних уроков рубрики «PHP»
Фильтрация данных с помощью zend-filter
Когда речь идёт о безопасности веб-сайта, то фраза «фильтруйте всё, экранируйте всё» всегда будет актуальна. Сегодня поговорим о фильтрации данных.
Контекстное экранирование с помощью zend-escaper
Обеспечение безопасности веб-сайта — это не только защита от SQL инъекций, но и протекция от межсайтового скриптинга (XSS), межсайтовой подделки запросов (CSRF) и от других видов атак. В частности, вам нужно очень осторожно подходить к формированию HTML, CSS и JavaScript кода.
Подключение Zend модулей к Expressive
Expressive 2 поддерживает возможность подключения других ZF компонент по специальной схеме. Не всем нравится данное решение. В этой статье мы расскажем как улучшили процесс подключение нескольких модулей.
Совет: отправка информации в Google Analytics через API
Предположим, что вам необходимо отправить какую-то информацию в Google Analytics из серверного скрипта. Как это сделать. Ответ в этой заметке.
Подборка PHP песочниц
Подборка из нескольких видов PHP песочниц. На некоторых вы в режиме online сможете потестить свой код, но есть так же решения, которые можно внедрить на свой сайт.
Php mysql вставка массива
Это краткое руководство о том, как вставить массив PHP в базу данных MySQL. Вы не можете напрямую вставлять значения массива в таблицу MySQL. Это не поддерживается. У нас есть четыре метода для вставки значения массива PHP в базу данных MySQL.
База данных MySQL
CREATE TABLE `products` ( `id` int(11) NOT NULL PRIMARY KEY AUTO_INCREMENT, `name` varchar(80) NOT NULL, `price` varchar(255) NOT NULL, `status` varchar(255) NOT NULL, `pro_details` longtext COLLATE utf8mb4_unicode_ci NOT NULL ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
Вариант 1. Повторяющийся запрос на вставку в каждой строке
array("Liam", "2700", "yes"), "1" => array("Noah", "6000", "no"), "2" => array("Oliver", "17000", "yes") ); if(is_array($user_data)) < foreach ($user_data as $row) < $val1 = mysqli_real_escape_string($db_conn, $row[0]); $val2 = mysqli_real_escape_string($db_conn, $row[1]); $val3 = mysqli_real_escape_string($db_conn, $row[2]); $query ="INSERT INTO products (name, price, status) VALUES ( '".$val1."','".$val2."','".$val3."' )"; mysqli_query($db_conn, $query); >> ?>
Вариант 2. Один запрос на вставку
array("Liam", "2700", "yes"), "1" => array("Noah", "6000", "no"), "2" => array("Oliver", "17000", "yes") ); if(is_array($user_data)) < $DataArr = array(); foreach($user_data as $row)< $val1 = mysqli_real_escape_string($db_conn, $row[0]); $val2 = mysqli_real_escape_string($db_conn, $row[1]); $val3 = mysqli_real_escape_string($db_conn, $row[2]); $DataArr[] = "('$val1', '$val2', '$val3')"; >$sql = "INSERT INTO products (name, price, status) values "; $sql .= implode(',', $DataArr); mysqli_query($db_conn, $sql); > ?>
Вариант 3. Сериализованная строка
array("Liam", "2700", "yes"), "1" => array("Noah", "6000", "no"), "2" => array("Oliver", "17000", "yes") ); $serialized_data = serialize($user_data); $sql = "insert into products (pro_details) value ('$serialized_data')"; mysqli_query($db_conn, $sql); /** * Результат * a:3:i:1;a:3:i:2;a:3:> * */ /** * Получить данные из базы данных mysql */ ?> ?>
Вариант 4. Строка JSON
array("Liam", "2700", "yes"), "1" => array("Noah", "6000", "no"), "2" => array("Oliver", "17000", "yes") ); $json_data = json_encode($user_data); $sql = "insert into products (pro_details) value ('$json_data')"; mysqli_query($db_conn, $sql); /** * Результат * [["Liam","2700″,"yes"],["Noah","6000″,"no"],["Oliver","17000″,"yes"]] */ /** * Получить данные JSON из базы данных mysql */ ?> ?>
How to Store Array in MySQL with PHP
An array is a special variable that allows storing one or more values in a single variable e.g. – holding usernames or details in an Array.
They are easier to access and manipulate.
Sometimes, require to store Array in the MySQL database and retrieve it.
In this tutorial, I show how you can store an Array in the MySQL database and read it with PHP.
Contents
1. Table structure
Create contents_arr table.
The ‘arr_serialize1’ and ‘arr_serialize2’ is used to store serialized value.
CREATE TABLE `contents_arr` ( `id` int(11) NOT NULL PRIMARY KEY AUTO_INCREMENT, `username` varchar(80) NOT NULL, `name` varchar(80) NOT NULL, `arr_serialize1` varchar(255) NOT NULL, `arr_serialize2` varchar(255) NOT NULL ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
2. Configuration
Create a config.php for the database connection.
Completed Code
3. With serialize() and unserialize()
Define two arrays – $names_arr , and $users_arr .
$names_arr Array is Indexed type Array and $users_arr is an Associative Array.
Serialize Syntax –
Pass the array in the serialize() method and pass the serialized values in the INSERT query.
Unserialize Syntax –
unserialize([Serialized value]);
Fetch records and pass the serialized value in the unserialize() method to convert it to Array format.
Completed Code
"yssyogesh","name"=>"Yogesh singh"); $users_arr[] = array("username"=>"bsonarika","name"=>"Sonarika Bhadoria"); $users_arr[] = array("username"=>"vijay","name"=>"Vijay Maurya"); // Serialize the Array $names_str = serialize($names_arr); $users_str = serialize($users_arr); // Insert record $sql = "INSERT INTO contents_arr(arr_serialize1,arr_serialize2) VALUES('".$names_str."','".$users_str."')"; mysqli_query($con,$sql); // Read record $sql = mysqli_query($con,"SELECT * FROM contents_arr"); while($row = mysqli_fetch_assoc($sql))< // Unserialize $arr_unserialize1 = unserialize($row['arr_serialize1']); $arr_unserialize2 = unserialize($row['arr_serialize2']); // Display echo ""; print_r($arr_unserialize1); print_r($arr_unserialize2); echo "«; >
Array ( [0] => Yogesh singh [1] => Sonarika Bhadoria [2] => Vijay Maurya ) Array ( [0] => Array ( [username] => yssyogesh [name] => Yogesh singh ) [1] => Array ( [username] => bsonarika [name] => Sonarika Bhadoria ) [2] => Array ( [username] => vijay [name] => Vijay Maurya ) )4. With implode() and explode()
Use implode() to separate the $names_arr by separator (” , “) and get a string. Pass the value in the INSERT query.
Fetch records and use explode() to convert a comma-separated string in an Array format.
In the example, I am displaying the value in a string and Array format.
Completed Code
"; echo ""; print_r($name_explode); echo ""; >
name : Yogesh singh , Sonarika Bhadoria , Vijay Maurya Array ( [0] => Yogesh singh [1] => Sonarika Bhadoria [2] => Vijay Maurya )5. With Loop
Loop on the $users_arr Array.
Read and pass the value in the INSERT query. New record is inserted until data is available.
Completed Code
"yssyogesh","name"=>"Yogesh singh"); $users_arr[] = array("username"=>"bsonarika","name"=>"Sonarika Bhadoria"); $users_arr[] = array("username"=>"vijay","name"=>"Vijay Maurya"); // Insert record foreach($users_arr as $userid=>$user) < $username = $user['username']; $name = $user['name']; $sql = "INSERT INTO contents_arr(username,name) VALUES('".$username."','".$name."')"; mysqli_query($con,$sql); >// Read record $sql = mysqli_query($con,"SELECT * FROM contents_arr"); while($row = mysqli_fetch_assoc($sql))< $username = $row['username']; $name = $row['name']; echo "username : ".$username.", name : ".$name."
"; >username : yssyogesh, name : Yogesh singh username : bsonarika, name : Sonarika Bhadoria username : vijay, name : Vijay Maurya6. Conclusion
It is better to use serialize() method which converts an Array to string format and stores it in a single column. You need to use the unserialize() method to convert the serialized value and get it back in the Array format.
If you found this tutorial helpful then don’t forget to share.