Am'd place pentru a obține toate de-un tabel mysql's col nume într-un array in php?
Este acolo o interogare pentru asta?
Cel mai bun mod este de a utiliza INFORMATION_SCHEMA metadate bază de date virtuală. În special INFORMATION_SCHEMA.COLOANE masa...
SELECT `COLUMN_NAME`
FROM `INFORMATION_SCHEMA`.`COLUMNS`
WHERE `TABLE_SCHEMA`='yourdatabasename'
AND `TABLE_NAME`='yourtablename';
L's FOARTE puternic, și poate oferi de TONE de informații fără a fi nevoie pentru a analiza de text (cum ar fi de tip coloană, dacă coloana este null, max dimensiune coloană, set de caractere, etc)...
Oh, și-l's standard SQL (Întrucât EMISIUNE ... este un MySQL extensie specifică)...
Pentru mai multe informații despre diferența dintre a ARĂTA și folosind `INFORMATION_SCHEMA mese, a verifica afară de MySQL Documentația privind INFORMATION_SCHEMA în general...
Puteți folosi următoarea interogare pentru MYSQL:
SHOW columns FROM your-table;
Mai jos este un exemplu de cod care arată Cum să pună în aplicare de mai sus sintaxa în php pentru a lista numelor de coloane:
$sql = "SHOW COLUMNS FROM your-table";
$result = mysqli_query($conn,$sql);
while($row = mysqli_fetch_array($result)){
echo $row['Field']."<br>";
}
Pentru Detalii despre producția de EMISIUNE de COLOANE DIN TABELUL vizita: MySQL Referinta.
Se pare că există 2 moduri:
DESCRIBE `tablename`
sau
SHOW COLUMNS FROM `tablename`
Mai multe despre "să DESCRIE" aici: http://dev.mysql.com/doc/refman/5.0/en/describe.html
Edit: Astăzi am învățat cel mai bun mod de a face acest lucru. Vă rugăm să consultați ircmaxell's a răspunde.
Analiza de ieșire de afișare COLOANE DIN tabel;`
Aici's mai multe despre asta aici: http://dev.mysql.com/doc/refman/5.0/en/show-columns.html
Un vechi funcția PHP "mysql_list_fields()" este învechită. Deci, astăzi, cel mai bun mod de a obține numele de domenii este o interogare "ARATĂ COLOANE DE table_name [CA 'numele']". Deci, aici este un mic exemplu:
$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; }
Folosesc mysql_fetch_field () pentru a vizualiza toate coloană de date. A se vedea 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;
}
"Avertisment Această extensie este învechită începând cu PHP 5.5.0, și vor fi eliminate în viitor."
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();
atunci când doriți să verificați toate structura de tabel cu unele depus apoi utilizați acest cod. În această interogare eu select column_name,column_type și table_name pentru mai multe detalii . Eu folosesc comanda prin column_type deci, eu pot vedea cu ușurință.
SELECT `COLUMN_NAME`,COLUMN_TYPE,TABLE_NAME
FROM `INFORMATION_SCHEMA`.`COLUMNS`
WHERE `TABLE_SCHEMA`='yourdatabasename' order by DATA_TYPE;
Dacă doriți să verificați doar dublu tip a depus atunci puteți face cu ușurință
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;
dacă doriți să verificați care terenul permite null tip etc, atunci puteți folosi acest
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;
vrei pentru a verifica mai apoi cred link-ul ajuta, de asemenea,.
SHOW COLOANE în mysql 5.1 (nu 5.5) utilizează temporar un disc de masă.
Astfel încât acesta poate fi considerat lent pentru unele cazuri. Cel puțin, se poate ciocni cu created_tmp_disk_tables valoare. Imaginați-vă o temporar pe disc de masă pe conexiune sau pe fiecare pagină cerere.
SHOW COLOANE nu este chiar atât de lent, poate pentru că se folosește sistemul de fișiere cache. Phpmyadmin spune ~0.5 ms în mod constant. Acest lucru este nimic în comparație cu 500ms-1000ms de servire o pagină wordpress. Dar totuși, există momente contează. Există un disc de sistem de implicare, nu știi niciodată ce se întâmplă atunci când serverul este ocupat, cache-ul este plin, hdd-ul este blocat etc.
Preluarea nume de coloană prin *SELECTAȚI DE la ... LIMITA 1** a fost în jurul valorii de ~0.1 ms, și se poate folosi query cache la fel de bine.
Deci, aici este micul meu cod optimizat pentru a obține numele de coloane dintr-un tabel, fără a utiliza show coloane dacă este posibil:
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;
}
Note:
Nu sunt sigur dacă acest lucru este ceea ce ați fost în căutarea pentru, dar aceasta a lucrat pentru mine:
$query = query("DESC YourTable");
$col_names = array_column($query, 'Field');
Care returnează o simplă matrice de coloana nume / nume de variabile din tabel sau matrice ca siruri de caractere, care este ceea ce am nevoie pentru a dinamic a construi interogări MySQL. Frustrarea mea a fost că am pur și simplu nu't știu cum să index array in PHP foarte bine, așa că am fost't știu ce să fac cu rezultatele de la DESC sau SPECTACOL. Sper că răspunsul meu este util pentru incepatori ca mine!
Pentru a verifica rezultatul: print_r($col_names);
dacă ai nevoie doar de nume de câmpuri și tipuri (probabil pentru ușor de copiere-lipire în Excel):
SELECT COLUMN_NAME, DATA_TYPE
FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_SCHEMA='databasenamegoeshere'
AND DATA_TYPE='decimal' and TABLE_NAME = 'tablenamegoeshere'
elimina
DATA_TYPE='decimal'
dacă doriți toate tipurile de date
dacă utilizați php, utiliza acest sinteza.
se poate obține selectați câmpurile de informații complete cu nici un rezultat, și toate câmpurile personalizate, cum ar fi:
SELECT a.name aname, b.name bname, b.*
FROM table1 a LEFT JOIN table2 b
ON a.id = b.pid;
dacă sql de mai sus nu returneze date,va primi, de asemenea, nume de câmp numele, numele, b's alte nume de câmp
doar două linii:
$query_info = mysqli_query($link, $data_source);
$fetch_fields_result = $query_info->fetch_fields();
Această întrebare este vechi, dar am ajuns aici în căutarea pentru o modalitate de a găsi o anumită interogare domeniul său nume într-un mod dinamic (nu neapărat numai câmpurile unui tabel). Și din moment ce oamenii continuă să subliniem acest lucru ca răspuns pentru că, având sarcina în alte întrebări legate de, I'm partajare modul în care am găsit-o poate face, folosind Gavin Simpson's sfaturi:
//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>";
}
}
Acest lucru poate fi ușor modificat pentru a introduce numele câmpurilor într-o matrice.
Folosind un simplu: $sql="SELECT * FROM myTable LIMITA de 1"
poate da câmpurile de orice masă, fără a fi nevoie de a utiliza EMISIUNE de COLOANE sau orice extra modulul php, dacă este necesar (eliminarea datelor basculante parte).
Sperăm că acest lucru vă ajută altcineva.
Această interogare preia o listă de toate coloanele într-o bază de date fără a fi nevoie să specificați un nume de tabel. Returnează o listă de doar nume de coloane:
SELECT COLUMN_NAME
FROM INFORMATION_SCHEMA.COLUMNS
WHERE table_schema = 'db_name'
Cu toate acestea, atunci când am fugit această interogare în phpmyadmin, se regăsesc o serie de erori. Cu toate acestea, ea a lucrat. Așa-l utilizați cu prudență.
eu nu sunt expert, dar asta functioneaza pentru mine..
$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>";}
}