Có cách nào để lấy tên cột của một bảng trong mysql không? sử dụng php
Có cách nào để lấy tên cột của một bảng trong mysql không? sử dụng php
Câu trả lời:
Bạn có thể sử dụng MÔ TẢ :
DESCRIBE my_table;
Hoặc trong các phiên bản mới hơn, bạn có thể sử dụng Information_SCHema :
SELECT COLUMN_NAME
FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_SCHEMA = 'my_database' AND TABLE_NAME = 'my_table';
Hoặc bạn có thể sử dụng 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
để mô tả có thể dễ dàng nhầm lẫn với DESC
giảm dần. Số lượng byte danh nghĩa mà bạn lưu cho việc thiếu khả năng đọc là không đáng.
Các câu lệnh SQL sau gần tương đương nhau:
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']
Tham khảo: THÔNG TIN CƠ SỞ
SHOW COLUMNS
trả về một bảng chứa tên cột, loại, v.v., trong khi SELECT COLUMN NAME
chỉ trả về tên cột.
Tôi đã tạo một hàm PDO trả về tất cả các tên cột trong một mảng đơn giản.
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);
}
}
Đầu ra sẽ là một mảng:
Array (
[0] => id
[1] => name
[2] => email
[3] => shoe_size
[4] => likes
... )
Xin lỗi vì đã bị hoại tử nhưng tôi thích chức năng của mình;)
PS Tôi chưa bao gồm lớp Core nhưng bạn có thể sử dụng lớp của riêng mình .. DS
Giải pháp này là từ dòng lệnh mysql
mysql>USE information_schema;
Trong truy vấn bên dưới, chỉ cần thay đổi <- DATABASE_NAME -> thành cơ sở dữ liệu của bạn và <- TABLENAME -> thành tên bảng của bạn, nơi bạn chỉ muốn các giá trị trường của câu lệnh DESCRIBE
mysql> SELECT COLUMN_NAME FROM COLUMNS WHERE TABLE_SCHEMA = '<--DATABASE_NAME-->' AND TABLE_NAME='<--TABLENAME-->';
Ngoài ra còn có điều này nếu bạn thích:
mysql_query('SHOW COLUMNS FROM tableName');
Còn cái này thì sao:
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;
Bảng mô tả chức năng MySQL sẽ đưa bạn đến nơi bạn muốn đến (đặt tên bảng của bạn cho "bảng"). Bạn sẽ phải phân tích một số đầu ra, nhưng nó khá dễ. Như tôi nhớ lại, nếu bạn thực hiện truy vấn đó, các hàm truy cập kết quả truy vấn PHP thường cung cấp cho bạn một cặp khóa-giá trị sẽ có tên cột là các khóa. Nhưng đã được một thời gian kể từ khi tôi sử dụng PHP, vì vậy đừng bắt tôi phải làm thế. :)
Tôi cần tên cột là một mảng phẳng, trong khi các câu trả lời khác trả về mảng kết hợp, vì vậy tôi đã sử dụng:
$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_names hiện bằng:
(
[0] => name
[1] => parent
[2] => number
[3] => chart_id
[4] => type
[5] => id
)
Các mysql_list_fields
chức năng có thể bạn quan tâm; nhưng, như hướng dẫn sử dụng:
Chức năng này không được chấp nhận. Thay vào đó, nên sử dụng
mysql_query()
để phát hành một câu lệnh SQLSHOW COLUMNS FROM table [LIKE 'name']
.
bạn có thể lấy toàn bộ cấu trúc bảng bằng cách sử dụng lệnh đơn giản sau.
DESC TableName
hoặc bạn có thể sử dụng truy vấn sau đây.
SHOW COLUMNS FROM TableName
$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);
}
điều này làm việc cho tôi ..
$sql = "desc MyTableName";
$result = @mysql_query($sql);
while($row = @mysql_fetch_array($result)){
echo $row[0]."<br>";
}
Tôi đã viết một tập lệnh php đơn giản để tìm nạp các cột trong bảng thông qua 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.";
}
?>
Thưởng thức!
mysqli fetch_field () làm việc cho tôi:
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();
}
Nguồn: https://www.w3schools.com/pHP/func_mysqli_fetch_field.asp