มีวิธีการคว้าชื่อคอลัมน์ของตารางใน MySQL หรือไม่? ใช้ php
มีวิธีการคว้าชื่อคอลัมน์ของตารางใน MySQL หรือไม่? ใช้ php
คำตอบ:
คุณสามารถใช้DESCRIBE :
DESCRIBE my_table;
หรือในเวอร์ชันที่ใหม่กว่าคุณสามารถใช้INFORMATION_SCHEMA :
SELECT COLUMN_NAME
FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_SCHEMA = 'my_database' AND TABLE_NAME = 'my_table';
หรือคุณสามารถใช้SHOW COLUMNS :
SHOW COLUMNS FROM my_table;
SELECT TABLE_NAME FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_SCHEMA = 'db_name' AND COLUMN_NAME = 'col_name';
desc my_table;
:-)
DESC
สำหรับการอธิบายสามารถสับสนได้ง่ายDESC
สำหรับการลง จำนวนไบต์ที่คุณบันทึกเนื่องจากการอ่านไม่ได้ไม่คุ้มค่า
คำสั่ง SQL ต่อไปนี้ใกล้เคียงกัน:
SELECT COLUMN_NAME
FROM INFORMATION_SCHEMA.COLUMNS
WHERE table_name = 'tbl_name'
[AND table_schema = 'db_name']
[AND column_name LIKE 'wild']
SHOW COLUMNS
FROM tbl_name
[FROM db_name]
[LIKE 'wild']
การอ้างอิง: INFORMATION_SCHEMA COLUMNS
SHOW COLUMNS
กลับตารางที่มีชื่อคอลัมน์ประเภท ฯลฯ ในขณะที่SELECT COLUMN NAME
ส่งกลับเพียงชื่อคอลัมน์
ฉันสร้างฟังก์ชัน PDO ที่ส่งกลับชื่อคอลัมน์ทั้งหมดในอาร์เรย์อย่างง่าย
public function getColumnNames($table){
$sql = "SELECT COLUMN_NAME FROM INFORMATION_SCHEMA.COLUMNS WHERE table_name = :table";
try {
$core = Core::getInstance();
$stmt = $core->dbh->prepare($sql);
$stmt->bindValue(':table', $table, PDO::PARAM_STR);
$stmt->execute();
$output = array();
while($row = $stmt->fetch(PDO::FETCH_ASSOC)){
$output[] = $row['COLUMN_NAME'];
}
return $output;
}
catch(PDOException $pe) {
trigger_error('Could not connect to MySQL database. ' . $pe->getMessage() , E_USER_ERROR);
}
}
ผลลัพธ์จะเป็นอาร์เรย์:
Array (
[0] => id
[1] => name
[2] => email
[3] => shoe_size
[4] => likes
... )
ขออภัยสำหรับ necro แต่ฉันชอบฟังก์ชั่นของฉัน;)
ป.ล. ฉันไม่ได้รวมคลาสคอร์ แต่คุณสามารถใช้คลาสของคุณเองได้ DS
การแก้ปัญหานี้มาจาก mysql บรรทัดคำสั่ง
mysql>USE information_schema;
ในแบบสอบถามด้านล่างเพียงเปลี่ยน <--DATABASE_NAME--> ไปยังฐานข้อมูลของคุณและ <--TABLENAME--> เป็นชื่อตารางของคุณซึ่งคุณต้องการให้ค่าฟิลด์ของคำสั่ง DESCRIBE
mysql> SELECT COLUMN_NAME FROM COLUMNS WHERE TABLE_SCHEMA = '<--DATABASE_NAME-->' AND TABLE_NAME='<--TABLENAME-->';
นอกจากนี้ยังมีสิ่งนี้หากคุณต้องการ:
mysql_query('SHOW COLUMNS FROM tableName');
เกี่ยวกับสิ่งนี้:
SELECT @cCommand := GROUP_CONCAT( COLUMN_NAME ORDER BY column_name SEPARATOR ',\n')
FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_SCHEMA = 'my_database' AND TABLE_NAME = 'my_table';
SET @cCommand = CONCAT( 'SELECT ', @cCommand, ' from my_database.my_table;');
PREPARE xCommand from @cCommand;
EXECUTE xCommand;
นอกจากนี้ยังเป็นที่น่าสนใจที่จะทราบว่าคุณสามารถใช้
EXPLAIN table_name
สิ่งที่มีความหมายเหมือนกันDESCRIBE table_name
และSHOW COLUMNS FROM table_name
แม้ว่าEXPLAINจะถูกใช้โดยทั่วไปเพื่อรับข้อมูลเกี่ยวกับแผนการดำเนินการแบบสอบถาม
มองเข้าไปใน:
mysql_query('DESCRIBE '.$table);
ฟังก์ชั่น MySQL อธิบายตารางควรนำคุณไปยังที่ที่คุณต้องการ (ใส่ชื่อตารางของคุณสำหรับ "table") คุณจะต้องแยกเอาท์พุทบางอย่าง แต่มันค่อนข้างง่าย ดังที่ฉันเรียกคืนถ้าคุณเรียกใช้คิวรีนั้นผลลัพธ์แบบสอบถามของ PHP จะเข้าถึงฟังก์ชันที่ตามปกติแล้วจะให้คู่ของคีย์ - ค่าแก่คุณจะมีชื่อคอลัมน์เป็นคีย์ แต่มันก็ใช้เวลาสักพักแล้วที่ฉันใช้ PHP ดังนั้นอย่าจับฉัน :)
คุณอาจต้องการตรวจสอบmysql_fetch_array()
เช่นใน:
$rs = mysql_query($sql);
while ($row = mysql_fetch_array($rs)) {
//$row[0] = 'First Field';
//$row['first_field'] = 'First Field';
}
ฉันต้องการชื่อคอลัมน์เป็นแบบแฟลตขณะที่คำตอบอื่น ๆ ส่งคืนอาร์เรย์ที่เชื่อมโยงกันดังนั้นฉันจึงใช้:
$con = mysqli_connect('localhost',$db_user,$db_pw,$db_name);
$table = 'people';
/**
* Get the column names for a mysql table
**/
function get_column_names($con, $table) {
$sql = 'DESCRIBE '.$table;
$result = mysqli_query($con, $sql);
$rows = array();
while($row = mysqli_fetch_assoc($result)) {
$rows[] = $row['Field'];
}
return $rows;
}
$col_names = function get_column_names($con, $table);
ตอนนี้ $ col_ ชื่อเท่ากับ:
(
[0] => name
[1] => parent
[2] => number
[3] => chart_id
[4] => type
[5] => id
)
mysql_list_fields
ฟังก์ชั่นที่คุณอาจสนใจ; แต่ในขณะที่รัฐคู่มือ:
ฟังก์ชั่นนี้เลิกใช้แล้ว เป็นที่นิยมใช้
mysql_query()
ในการออกSHOW COLUMNS FROM table [LIKE 'name']
คำสั่งSQL แทน
คุณสามารถรับโครงสร้างตารางทั้งหมดโดยใช้คำสั่งง่ายๆ
DESC TableName
หรือคุณสามารถใช้แบบสอบถามต่อไปนี้
SHOW COLUMNS FROM TableName
ใน mysql เพื่อรับรายละเอียดคอลัมน์และโครงสร้างตารางโดยทำตามคำหลักหรือแบบสอบถาม
1DESC table_name
2DESCRIBE table_name
3SHOW COLUMNS FROM table_name
4SHOW create table table_name;
5EXPLAIN table_name
$col = $db->query("SHOW COLUMNS FROM category");
while ($fildss = $col->fetch_array())
{
$filds[] = '"{'.$fildss['Field'].'}"';
$values[] = '$rows->'.$fildss['Field'].'';
}
if($type == 'value')
{
return $values = implode(',', $values);
}
else {
return $filds = implode(',', $filds);
}
สิ่งนี้ใช้ได้กับฉัน ..
$sql = "desc MyTableName";
$result = @mysql_query($sql);
while($row = @mysql_fetch_array($result)){
echo $row[0]."<br>";
}
ฉันได้เขียนสคริปต์ PHP ง่าย ๆ เพื่อดึงข้อมูลคอลัมน์ตารางผ่าน PHP: Show_table_columns.php
<?php
$db = 'Database'; //Database name
$host = 'Database_host'; //Hostname or Server ip
$user = 'USER'; //Database user
$pass = 'Password'; //Database user password
$con = mysql_connect($host, $user, $pass);
if ($con) {
$link = mysql_select_db($db) or die("no database") . mysql_error();
$count = 0;
if ($link) {
$sql = "
SELECT column_name
FROM information_schema.columns
WHERE table_schema = '$db'
AND table_name = 'table_name'"; // Change the table_name your own table name
$result = mysql_query($sql, $con);
if (mysql_query($sql, $con)) {
echo $sql . "<br> <br>";
while ($row = mysql_fetch_row($result)) {
echo "COLUMN " . ++$count . ": {$row[0]}<br>";
$table_name = $row[0];
}
echo "<br>Total No. of COLUMNS: " . $count;
} else {
echo "Error in query.";
}
} else {
echo "Database not found.";
}
} else {
echo "Connection Failed.";
}
?>
สนุก!
mysqli fetch_field () ทำงานให้ฉัน:
if ($result = $mysqli -> query($sql)) {
// Get field information for all fields
while ($fieldinfo = $result -> fetch_field()) {
printf("Name: %s\n", $fieldinfo -> name);
printf("Table: %s\n", $fieldinfo -> table);
printf("Max. Len: %d\n", $fieldinfo -> max_length);
}
$result -> free_result();
}
ที่มา: https://www.w3schools.com/pHP/func_mysqli_fetch_field.asp