ver usando una tabla registros propiedades obtener nombre name mostrar listar las fields datos como columnas campos php mysql

php - usando - ¿Consulta MySQL para obtener nombres de columna?



obtener datos mysql php (19)

Esta consulta obtiene una lista de todas las columnas en una base de datos sin tener que especificar un nombre de tabla. Devuelve una lista de solo nombres de columna:

SELECT COLUMN_NAME FROM INFORMATION_SCHEMA.COLUMNS WHERE table_schema = ''db_name''

Sin embargo, cuando ejecuté esta consulta en phpmyadmin, mostró una serie de errores. Sin embargo, funcionó. Así que úsalo con precaución.

Me gustaría obtener todos los nombres de columna de una tabla mysql en una matriz en php?

¿Hay alguna consulta para esto?


Esta pregunta es antigua, pero llegué aquí buscando una forma de encontrar una consulta determinada, los nombres de sus campos de forma dinámica (no necesariamente los campos de una tabla). Y dado que la gente sigue señalando esto como la respuesta para esa tarea dada en otras preguntas relacionadas, estoy compartiendo la forma en que encontré que se puede hacer, usando los consejos de Gavin Simpson:

//Function to generate a HTML table from a SQL query function myTable($obConn,$sql) { $rsResult = mysqli_query($obConn, $sql) or die(mysqli_error($obConn)); if(mysqli_num_rows($rsResult)>0) { //We start with header. >>>Here we retrieve the field names<<< echo "<table width=/"100%/" border=/"0/" cellspacing=/"2/" cellpadding=/"0/"><tr align=/"center/" bgcolor=/"#CCCCCC/">"; $i = 0; while ($i < mysqli_num_fields($rsResult)){ $field = mysqli_fetch_field_direct($rsResult, $i); $fieldName=$field->name; echo "<td><strong>$fieldName</strong></td>"; $i = $i + 1; } echo "</tr>"; //>>>Field names retrieved<<< //We dump info $bolWhite=true; while ($row = mysqli_fetch_assoc($rsResult)) { echo $bolWhite ? "<tr bgcolor=/"#CCCCCC/">" : "<tr bgcolor=/"#FFF/">"; $bolWhite=!$bolWhite; foreach($row as $data) { echo "<td>$data</td>"; } echo "</tr>"; } echo "</table>"; } }

Esto se puede modificar fácilmente para insertar los nombres de campo en una matriz.

Usando un simple: $sql="SELECT * FROM myTable LIMIT 1" puede proporcionarle los campos de cualquier tabla, sin necesidad de usar SHOW COLUMNS o cualquier módulo php adicional, si es necesario (eliminar la parte del volcado de datos).

Esperemos que esto ayude a alguien más.


He hecho esto en el pasado.

SELECT column_name FROM information_schema.columns WHERE table_name=''insert table name here'';


La mejor manera es utilizar la base de datos virtual de metadatos INFORMATION_SCHEMA . Específicamente la tabla INFORMATION_SCHEMA.COLUMNS ...

SELECT `COLUMN_NAME` FROM `INFORMATION_SCHEMA`.`COLUMNS` WHERE `TABLE_SCHEMA`=''yourdatabasename'' AND `TABLE_NAME`=''yourtablename'';

Es MUY poderoso, y puede proporcionarle TONELADAS de información sin necesidad de analizar texto (como el tipo de columna, si la columna es anulable, tamaño máximo de columna, conjunto de caracteres, etc.) ...

Ah, y es SQL estándar (Considerando que SHOW ... es una extensión específica de MySQL) ...

Para obtener más información acerca de la diferencia entre SHOW... y el uso de las tablas INFORMATION_SCHEMA , consulte la documentación de MySQL en INFORMATION_SCHEMA en general ...


No estoy seguro si esto es lo que buscabas, pero esto funcionó para mí:

$query = query("DESC YourTable"); $col_names = array_column($query, ''Field'');

Eso devuelve una matriz simple de los nombres de columnas / variables en su tabla o matriz como cadenas, que es lo que necesitaba para construir dinámicamente las consultas de MySQL. Mi frustración fue que simplemente no sé cómo indexar matrices en PHP muy bien, así que no estaba seguro de qué hacer con los resultados de DESC o SHOW. Espero que mi respuesta sea de utilidad para principiantes como yo!

Para comprobar el resultado: print_r($col_names);


No soy un experto, pero esto funciona para mí ..

$sql = "desc MyTable"; $result = @mysql_query($sql); while($row = @mysql_fetch_array($result)){ echo $row[0]."<br>"; // returns the first column of array. in this case Field // the below code will return a full array-> Field,Type,Null,Key,Default,Extra // for ($c=0;$c<sizeof($row);$c++){echo @$row[$c]."<br>";} }



Prueba este, yo personalmente lo uso:

SHOW COLUMNS FROM $table where field REGEXP ''stock_id|drug_name''


Puedes usar la siguiente consulta para MYSQL:

SHOW columns FROM your-table;

A continuación se muestra el código de ejemplo que muestra cómo implementar la sintaxis anterior en php para enumerar los nombres de las columnas:

$sql = "SHOW COLUMNS FROM your-table"; $result = mysqli_query($conn,$sql); while($row = mysqli_fetch_array($result)){ echo $row[''Field'']."<br>"; }

Para obtener detalles sobre el resultado de SHOW COLUMNS FROM TABLE visite: MySQL Refrence.


Si usas php, usa esta gist .

puede obtener información completa de los campos de selección sin resultados, y todos los campos personalizados como:

SELECT a.name aname, b.name bname, b.* FROM table1 a LEFT JOIN table2 b ON a.id = b.pid;

Si arriba de SQL no devuelve datos, también obtendremos los nombres de campo aname, bname, b''s other field name

sólo dos líneas:

$query_info = mysqli_query($link, $data_source); $fetch_fields_result = $query_info->fetch_fields();


Una antigua función de PHP "mysql_list_fields ()" está en desuso. Entonces, hoy la mejor manera de obtener nombres de campos es una consulta "MOSTRAR COLUMNAS DESDE nombre_tabla [LIKE ''nombre'']". Entonces, aquí hay un pequeño ejemplo:

$fields = array(); $res=mysql_query("SHOW COLUMNS FROM mytable"); while ($x = mysql_fetch_assoc($res)){ $fields[] = $x[''Field'']; } foreach ($fields as $f) { echo "<br>Field name: ".$f; }


Utilice mysql_fetch_field() para ver todos los datos de la columna. Ver manual .

$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; }

"Advertencia Esta extensión está en desuso a partir de PHP 5.5.0 y se eliminará en el futuro".


cuando desee verificar su estructura de todas las tablas con algún archivo, use este código. En esta consulta, selecciono column_name, column_type y table_name para más detalles. Utilizo order by column_type para poder verlo fácilmente.

SELECT `COLUMN_NAME`,COLUMN_TYPE,TABLE_NAME FROM `INFORMATION_SCHEMA`.`COLUMNS` WHERE `TABLE_SCHEMA`=''yourdatabasename'' order by DATA_TYPE;

Si desea verificar solo el tipo doble archivado, puede hacerlo fácilmente

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;

Si desea comprobar qué campo permite el tipo nulo, etc., puede utilizar este

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;

quieres ver más, entonces el enlace thik también te ayuda.

https://dev.mysql.com/doc/refman/5.7/en/columns-table.html


si solo necesita los nombres y tipos de campo (quizás para copiar y pegar fácilmente en Excel):

SELECT COLUMN_NAME, DATA_TYPE FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_SCHEMA=''databasenamegoeshere'' AND DATA_TYPE=''decimal'' and TABLE_NAME = ''tablenamegoeshere''

retirar

DATA_TYPE=''decimal''

si quieres todos los tipos de datos


EN WORDPRESS:

global $wpdb; $table_name=$wpdb->prefix.''posts''; foreach ( $wpdb->get_col( "DESC " . $table_name, 0 ) as $column_name ) { var_dump( $column_name ); }



La solución más simple de todas las respuestas:

DESC `table name`

o

DESCRIBE `table name`

o

SHOW COLUMNS FROM `table name`


MOSTRAR COLUMNAS en mysql 5.1 (no 5.5) usa una tabla de disco temporal.

Por eso puede considerarse lento para algunos casos. Al menos, puede aumentar el valor de created_tmp_disk_tables . Imagine una tabla de disco temporal por conexión o por solicitud de página.

SHOW COLUMNS no es realmente tan lento, posiblemente porque utiliza el caché del sistema de archivos. Phpmyadmin dice ~ 0.5ms consistentemente. Esto no es nada comparado con 500ms-1000ms de servir una página de wordpress. Pero aún así, hay veces que importa. Hay una participación del sistema de disco, nunca se sabe qué sucede cuando el servidor está ocupado, la memoria caché está llena, el disco duro está bloqueado, etc.

La recuperación de nombres de columna a través de SELECT * FROM ... LIMIT 1 fue de alrededor de ~ 0.1ms, y también puede usar el caché de consultas.

Así que aquí está mi pequeño código optimizado para obtener los nombres de las columnas de una tabla, sin usar las columnas show si es posible:

function db_columns_ar($table) { //returns Array(''col1name''=>''col1name'',''col2name''=>''col2name'',...) if(!$table) return Array(); if(!is_string($table)) return Array(); global $db_columns_ar_cache; if(!empty($db_columns_ar_cache[$table])) return $db_columns_ar_cache[$table]; //IMPORTANT show columns creates a temp disk table $cols=Array(); $row=db_row_ar($q1="SELECT * FROM `$table` LIMIT 1"); if($row) { foreach($row as $name=>$val) $cols[$name]=$name; } else { $coldata=db_rows($q2="SHOW COLUMNS FROM `$table`"); if($coldata) foreach($coldata as $row) $cols[$row->Field]=$row->Field; } $db_columns_ar_cache[$table]=$cols; //debugexit($q1,$q2,$row,$coldata,$cols); return $cols; }

Notas:

  • Siempre y cuando la primera fila de sus tablas no contenga un rango de datos de megabyte, debería funcionar bien.
  • Los nombres de las funciones db_rows y db_row_ar deben reemplazarse con la configuración específica de su base de datos.

function get_col_names(){ $sql = "SHOW COLUMNS FROM tableName"; $result = mysql_query($sql); while($record = mysql_fetch_array($result)){ $fields[] = $record[''0'']; } foreach ($fields as $value){ echo ''column name is : ''.$value.''-''; } } return get_col_names();