- How PHP array to schema of MySQL table?
- Get a MySQL table structure with DESCRIBE
- Example table
- Using DESCRIBE
- Using PHP
- Querying the INFORMATION_SCHEMA
- Check Out These Related posts:
- MySQL: How to show the schema of a MySQL database table
- A complete MySQL “show tables” example
- Запрос MySQL для получения имен столбцов таблицы
- Ответ 1
- Ответ 2
- Ответ 3
- Ответ 4
- Ответ 5
- Ответ 6
- Ответ 7
How PHP array to schema of MySQL table?
Для удобства разработки навеяло мне создать некий объект который будет в режиме «дебаг» сравнивать структуру таблицы заложенную в массив со структурой полученной из DESCRIBE table и при необходимости с помощью команд ALTER table будет изменять структуру таблицы.
Надоело лазить во всякие phpmyadmin и прочие за элементарными действиями.
К примеру имеем таблицу — company
и массив её полей
$filds = [ ['id', 'int(11)', 'NO', 'PRI', '', 'auto_increment'], ['caption', 'varchar(255)', 'NO', 'MUL', '', ''], ['city', 'varchar(255)', 'NO', '', '', ''], ['inn', 'varchar(255)', 'NO', '', '', ''], ['active', "enum('1','0')", 'NO', '', '1', ''] ];
Понадобилось нам добавить поле телефон Phone
добавляем
['id', 'int(11)', 'NO', 'PRI', '', 'auto_increment'], ['caption', 'varchar(255)', 'NO', 'MUL', '', ''], ['city', 'varchar(255)', 'NO', '', '', ''], ['inn', 'varchar(255)', 'NO', '', '', ''], ['phone', 'varchar(255)', 'NO', '', '', ''], ['active', "enum('1','0')", 'NO', '', '1', '']
И при следующем создании экземпляра объекта Компания
Мы увидим что DESCRIBE company отличается от массива $filds
Тогда к базе литит квери
ALTER TABLE company ADD phone VARCHAR(255) AFTER inn
Если из массива удалить строчку [‘city’, ‘varchar(255)’, ‘NO’, », », »],
Тогда ALTER TABLE company DROP city
И так далее. Всего необходимы следующие функции модификации:
— добавить поле
— удалить поле
— изменить тип
— добавить ключ
— переместить поле (изменить порядок внутри таблицы)
.
Может кто подскажет готовую реализацию.
И вообще по вашему опыту — оно надо?
Как по вашему должен выглядеть список возможностей модификаций? Что бы добавили сюда?
Get a MySQL table structure with DESCRIBE
There are at least two ways to get a MySQL table’s structure using SQL queries. The first is using DESCRIBE and the second by querying the INFORMATION_SCHEMA. This post deals with the DESCRIBE function and the next MySQL post looks at the INFORMATION_SCHEMA.
Example table
The example table used in this post was created with the following SQL:
CREATE TABLE `products` ( `product_id` int(10) unsigned NOT NULL auto_increment, `url` varchar(100) NOT NULL, `name` varchar(50) NOT NULL, `description` varchar(255) NOT NULL, `price` decimal(10,2) NOT NULL, `visible` tinyint(1) unsigned NOT NULL default '1', PRIMARY KEY (`product_id`), UNIQUE KEY `url` (`url`), KEY `visible` (`visible`) )
Using DESCRIBE
The SQL query to get the table structure is:
You can run this from the MySQL CLI; phpMyAdmin; or using a programming language like PHP and then using the functions to retrieve each row from the query.
The resulting data from the MySQL CLI looks like this for the example table above:
+-------------+---------------------+------+-----+---------+----------------+ | Field | Type | Null | Key | Default | Extra | +-------------+---------------------+------+-----+---------+----------------+ | product_id | int(10) unsigned | NO | PRI | NULL | auto_increment | | url | varchar(100) | NO | UNI | NULL | | | name | varchar(50) | NO | | NULL | | | description | varchar(255) | NO | | NULL | | | price | decimal(10,2) | NO | | NULL | | | visible | tinyint(1) unsigned | NO | MUL | 1 | | +-------------+---------------------+------+-----+---------+----------------+
Using PHP
If you were using PHP, for example, you could do something like this:
$res = mysql_query('DESCRIBE products'); while($row = mysql_fetch_array($res)) < echo "- n"; >
The output using the example table would be this:
product_id - int(10) unsigned url - varchar(100) name - varchar(50) description - varchar(255) price - decimal(10,2) visible - tinyint(1) unsigned
Querying the INFORMATION_SCHEMA
My next MySQL post will look at how to do the same using the INFORMATION_SCHEMA, which provides more information than DESCRIBE, although I have found querying the INFORMATION_SCHEMA can run a little slowly sometimes myself.
Check Out These Related posts:
MySQL: How to show the schema of a MySQL database table
MySQL table/schema FAQ: How do I show a database table schema in a MySQL database?
Short answer: To show the schema for a MySQL database table, use the MySQL desc command. You issue this command from the MySQL client command line prompt, like this:
mysql> desc orders;
A complete MySQL “show tables” example
Longer answer: You need to log into your MySQL database, select a database to use, and then issue the desc command. For instance, assuming you want to see the schema of a table named orders in a database named restaurant , use these commands from the mysql client (MySQL command line) after logging into your MySQL database:
$ mysql -u root -p [enter password here] mysql> use restaurant; mysql> desc orders;
The first command ( use restaurant ) tells MySQL that you want to work in that database, and the second command ( desc orders ) shows the schema of the MySQL table named orders .
When I run the MySQL desc command on one of my sample MySQL database tables named customers , I see output that looks like this:
mysql> desc customers; +-------+------------------+------+-----+---------+----------------+ | Field | Type | Null | Key | Default | Extra | +-------+------------------+------+-----+---------+----------------+ | id | int(10) unsigned | NO | PRI | NULL | auto_increment | | name | varchar(20) | NO | | NULL | | +-------+------------------+------+-----+---------+----------------+ 2 rows in set (0.14 sec)
Запрос MySQL для получения имен столбцов таблицы
Я хотел бы получить все имена столбцов таблицы mysql в массив на php.
Есть ли для этого запрос?
Ответ 1
Лучше всего использовать виртуальную базу данных метаданных INFORMATION_SCHEMA . В частности, таблица INFORMATION_SCHEMA.COLUMNS .
SELECT `COLUMN_NAME`
FROM `INFORMATION_SCHEMA`.`COLUMNS`
WHERE `TABLE_SCHEMA`=’yourdatabasename’
AND `TABLE_NAME`=’yourtablename’;
Это ОЧЕНЬ мощный способ , и он может предоставить вам ТОННЫ информации без необходимости анализировать текст (например, тип столбца, наличие в нем значения NULL, максимальный размер столбца, набор символов и т. д.).
И это стандартный SQL (в то время как SHOW — это расширение для MySQL) .
Для получения дополнительной информации о различиях между таблицами SHOW. и их использовании с INFORMATION_SCHEMA, ознакомьтесь с общей документацией INFORMATION_SCHEMA для MySQL.
Ответ 2
Вы можете использовать следующий запрос для MYSQL:
SHOW `columns` FROM `your-table`;
Ниже приведен пример кода, который показывает, как реализовать указанный выше синтаксис в php для перечисления имен столбцов:
$sql = «SHOW COLUMNS FROM your-table»;
$result = mysqli_query($conn,$sql);
while($row = mysqli_fetch_array($result))
echo $row[‘Field’].»
«;
>
Для получения подробной информации о выводе SHOW COLUMNS FROM TABLE ознакомьтесь с документацией.
Ответ 3
Используйте mysql_fetch_field() для просмотра всех данных столбца. См. Руководство .
$query = ‘select * from myfield’;
$result = mysql_query($query);
$i = 0;
while ($i < mysql_num_fields($result))
$fld = mysql_fetch_field($result, $i);
$myarray[]=$fld->name;
$i = $i + 1;
>
«Предупреждение. Это расширение устарело с PHP 5.5.0 и будет удалено в будущем».
Ответ 4
Старая функция PHP «mysql_list_fields()» устарела. Сегодня лучший способ получить имена полей — это выполнить запрос « SHOW COLUMNS FROM table_name [LIKE ‘name’] ». Небольшой пример:
$fields = array();
$res=mysql_query(«SHOW COLUMNS FROM mytable»);
while ($x = mysql_fetch_assoc($res))
$fields[] = $x[‘Field’];
>
foreach ($fields as $f) < echo "
Field name: «.$f; >
Ответ 5
Если вы хотите проверить всю структуру таблицы с некоторыми полями, используйте этот код. В этом запросе я выбираю имя_столбца, тип_столбца и имя_таблицы для получения дополнительных сведений. Я использую order by column_type, чтобы легко это видеть.
SELECT `COLUMN_NAME`,COLUMN_TYPE,TABLE_NAME
FROM `INFORMATION_SCHEMA`.`COLUMNS`
WHERE `TABLE_SCHEMA`=’yourdatabasename’ order by DATA_TYPE;
Если вы хотите проверять только поля двойного типа, вы можете сделать это так :
SELECT `COLUMN_NAME`,COLUMN_TYPE,TABLE_NAME,DATA_TYPE
FROM `INFORMATION_SCHEMA`.`COLUMNS`
WHERE `TABLE_SCHEMA`=’yourdatabasename’ AND DATA_TYPE like ‘%bigint%’ order by DATA_TYPE;
Е сли вы хотите проверить, какое поле разрешает нулевой тип и т. д., можно использовать это:
SELECT `COLUMN_NAME`,COLUMN_TYPE,TABLE_NAME,IS_NULLABLE,DATA_TYPE
FROM `INFORMATION_SCHEMA`.`COLUMNS`
WHERE `TABLE_SCHEMA`=’yourdatabasename’ and DATA_TYPE like ‘%bigint%’ and IS_NULLABLE =’NO’ order by COLUMN_TYPE;
Ответ 6
Не уверен, что это то, что вы искали, но у меня это сработало:
$query = query(«DESC YourTable»);
$col_names = array_column($query, ‘Field’);
Этот код возвращает простой массив имен столбцов/имен переменных в вашей таблице или массиве в виде строк, что нужно для динамического построения запросов MySQL. Мое разочарование заключа ется в том, что я просто не знаю, как правильно индексировать массивы в PHP, поэтому я не уверен, что делать с результатами DESC или SHOW. Надеюсь, мой ответ будет полезен для таких новичков, как я!
Для получения результата:
print_r($col_names);
Ответ 7
- Пока первая строка вашей таблицы не содержит мегабайтного диапазона данных, она должна работать нормально.
- Имена функций db_rows и db_row_ar должны быть заменены вашей конкретной настройкой базы данных.
Мы будем очень благодарны
если под понравившемся материалом Вы нажмёте одну из кнопок социальных сетей и поделитесь с друзьями.