답변:
가장 좋은 방법은 INFORMATION_SCHEMA 메타 데이터 가상 데이터베이스 를 사용하는 것 입니다. 특히 INFORMATION_SCHEMA.COLUMNS 테이블 ...
SELECT `COLUMN_NAME`
FROM `INFORMATION_SCHEMA`.`COLUMNS`
WHERE `TABLE_SCHEMA`='yourdatabasename'
AND `TABLE_NAME`='yourtablename';
매우 강력하며 텍스트를 구문 분석 할 필요없이 정보의 톤을 제공 할 수 있습니다 (열 유형과 같이 열이 nullable인지, 최대 열 크기, 문자 집합 등) ...
아, 그리고 그것은 표준 SQL입니다 ( SHOW ...
MySQL 전용 확장 프로그램 인 반면 ) ...
테이블 SHOW...
과 INFORMATION_SCHEMA
테이블 의 차이점에 대한 자세한 내용은 일반적으로 MySQL 설명서를 참조하십시오INFORMATION_SCHEMA
...
SET @@SESSION.sql_mode = 'ANSI_QUOTES';
있었지만 정말 마음에 들지 않습니다. 그리고 식별자 구분을위한 백 틱에 문제가 없습니다. 사실, 그들처럼 내가 더 나은 따옴표보다는 ... 각각 자신에 ... (큰 따옴표 나에게 질의 느낌의 잘못을 만든다)
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']."<br>";
}
SHOW COLUMNS FROM TABLE
방문 결과에 대한 자세한 내용은 MySQL Refrence를 참조하십시오.
DESC TableName;
;-)
두 가지 방법이 있습니다.
DESCRIBE `tablename`
또는
SHOW COLUMNS FROM `tablename`
더에 DESCRIBE
여기 : http://dev.mysql.com/doc/refman/5.0/en/describe.html
DESCRIBE
는 바로 가기입니다 SHOW COLUMNS FROM
.
DESC
더 짧습니다 DESCRIBE
!
편집 : 오늘 나는 이것을하는 더 좋은 방법을 배웠습니다. ircmaxell의 답변을 참조하십시오.
출력 분석 SHOW COLUMNS FROM table;
여기에 더 자세한 내용이 있습니다 : http://dev.mysql.com/doc/refman/5.0/en/show-columns.html
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부터 더 이상 사용되지 않으며 향후 제거 될 예정입니다."
mysqli_num_fields()
및 mysqli_fetch_field_direct()
업데이트 방법이 있습니다
오래된 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 "<br>Field name: ".$f; }
이것이 당신이 찾고있는 것인지 확실하지 않지만 이것은 나를 위해 일했습니다.
$query = query("DESC YourTable");
$col_names = array_column($query, 'Field');
테이블이나 배열의 열 이름 / 변수 이름의 간단한 배열을 문자열로 반환하므로 MySQL 쿼리를 동적으로 작성하는 데 필요합니다. 내 좌절감은 PHP에서 배열을 인덱스하는 방법을 잘 모른다는 것이므로 DESC 또는 SHOW의 결과로 무엇을 해야할지 모르겠습니다. 내 대답이 나와 같은 초보자에게 도움이되기를 바랍니다.
결과를 확인하려면 print_r($col_names);
일부 테이블 구조로 모든 테이블 구조를 확인하려면이 코드를 사용하십시오. 이 쿼리에서 자세한 내용을 보려면 column_name, column_type 및 table_name을 선택하십시오. column_type으로 order를 사용하므로 쉽게 볼 수 있습니다.
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;
더 많은 것을 확인하고 싶다면 thik link도 도움이됩니다.
mysql 5.1 (5.5 아님)의 SHOW COLUMNS 는 임시 디스크 테이블을 사용합니다.
따라서 경우에 따라 느리게 간주 될 수 있습니다. 최소한 created_tmp_disk_tables 값을 올릴 수 있습니다 . 연결 당 또는 각 페이지 요청 당 하나의 임시 디스크 테이블을 상상해보십시오.
SHOW COLUMNS 는 파일 시스템 캐시를 사용하기 때문에 속도가 느리지 않습니다. Phpmyadmin은 ~ 0.5ms를 일관되게 말합니다. 이것은 500ms-1000ms의 워드 프레스 페이지를 제공하는 것과 비교할만한 것은 아닙니다. 그러나 여전히 중요한시기가 있습니다. 디스크 시스템 관련이 있으며 서버가 사용 중이거나 캐시가 가득 찼거나 hdd가 멈췄을 때 어떤 일이 발생하는지 알 수 없습니다.
SELECT * FROM ... LIMIT 1을 통한 열 이름 검색 은 ~ 0.1ms 정도였으며 쿼리 캐시도 사용할 수 있습니다.
따라서 가능한 경우 show columns 를 사용하지 않고 테이블에서 열 이름을 가져 오는 최적화 된 코드는 다음과 같습니다.
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;
}
노트:
개인적으로 사용하는 것이 좋습니다.
SHOW COLUMNS FROM $table where field REGEXP 'stock_id|drug_name'
이 질문은 오래되었지만 여기서는 주어진 쿼리에 필드 이름을 동적으로 (테이블의 필드 만이 아니라) 찾는 방법을 찾고있었습니다. 사람들은 이것을 다른 관련 질문에서 주어진 작업에 대한 답변으로 계속 지적하기 때문에 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>";
}
}
필드 이름을 배열에 삽입하기 위해 쉽게 수정할 수 있습니다.
간단한 사용 : 필요한 경우 추가 PHP 모듈 $sql="SELECT * FROM myTable LIMIT 1"
을 사용하지 않고도 테이블의 필드를 제공 할 수 있습니다 SHOW COLUMNS
(데이터 덤프 부분 제거).
잘하면 이것은 다른 누군가를 돕습니다.
PHP를 사용한다면이 요점을 사용하십시오 .
결과없이 선택 필드 전체 정보를 얻을 수 있으며 다음과 같은 모든 사용자 정의 필드를 얻을 수 있습니다.
SELECT a.name aname, b.name bname, b.*
FROM table1 a LEFT JOIN table2 b
ON a.id = b.pid;
위의 SQL이 데이터를 반환하지 않으면 필드 이름 aname, bname, b의 다른 필드 이름 도 가져옵니다.
두 줄만 :
$query_info = mysqli_query($link, $data_source);
$fetch_fields_result = $query_info->fetch_fields();
이 쿼리는 테이블 이름을 지정하지 않고 데이터베이스의 모든 열 목록을 가져옵니다. 열 이름의 목록 만 반환합니다.
SELECT COLUMN_NAME
FROM INFORMATION_SCHEMA.COLUMNS
WHERE table_schema = 'db_name'
그러나 phpmyadmin 에서이 쿼리를 실행하면 일련의 오류가 표시되었습니다. 그럼에도 불구하고 효과가있었습니다. 주의해서 사용하십시오.
나는 전문가가 아니지만 이것은 나를 위해 작동합니다 ..
$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>";}
}
나는 SQL Server 에서이 쿼리를 시도했고 이것은 나를 위해 일했다 :
SELECT name FROM sys.columns WHERE OBJECT_ID = OBJECT_ID('table_name')