Многие подумают, что это повторяющийся вопрос, и ответы на него уже даны, но у меня другая проблема, здесь я не знаю количество столбцов и название столбцов!
У меня есть тип ввода текста в html, в котором пользователь может напрямую управлять базой данных. Пользователь может запросить любую таблицу в базе данных. Все таблицы имеют разные имена столбцов и количество столбцов. И я не могу использовать оператор sql «описать» и «показать столбец», так как имя столбца неизвестно.
Все ответы на этот вопрос предполагают, что программист уже знает имя столбца. и количество столбцов в таблице.
Итак, вопрос:
как получить количество столбцов в таблице?
как получить имена столбцов таблицы для отображения в теге заголовка таблицы?
@ssemilla Думаю, вы не поняли вопроса. В базе данных много таблиц. Пользователь может запросить любую таблицу во время выполнения, поэтому имя таблицы неизвестно. Возможный повторяющийся вопрос, который вы указали, предполагает, что имя таблицы уже известно!
Вы должны были указать, что пользователю также неизвестны имена таблиц. В любом случае вам просто нужно запросить имена таблиц, например. SELECT table_name FROM information_schema.tables; и объедините это с ответами в stackoverflow.com/questions/8334493/…






Вы можете использовать DESC TABLE_NAME.
Итерируйте возврат, чтобы узнать количество полей.
Спасибо за ответ, но я нашел другой способ получить количество полей в таблице. То есть mysqli_num_fields ($ result). Теперь все, что я хочу получить, получить заголовки этих столбцов
DESC "TABLE_NAME" возвращает несколько записей, и одна из них [Поле] - это имя этих столбцов. Разве это не ответ на вашу проблему?
Используйте SHOW COLUMNS FROM your_table_name_here, и когда вы получите результаты, счетчик количества строк покажет вам, сколько столбцов там.
Часть возвращаемых данных включается в названия столбцов, которые вы можете использовать для заголовков таблиц.
$ColsQ = $yourdb->prepare('SHOW COLUMNS FROM ' . $your_table_name_here);
$ColsQ->execute();
$ColsD = $ColsQ->fetchAll(PDO::FETCH_ASSOC);
echo 'There are ' . count($ColsD) . ' columns in the table';
foreach ($ColsD as $Column) {
echo 'Column name is ' . $Column['Field'];
}
Спасибо за ответ, но все же это не решает мою проблему. Ожидается, что программист уже знает имя столбца. На моем веб-сайте пользователь может запросить любую таблицу в базе данных, поэтому имя таблицы неизвестно, пока пользователь не введет запрос.
Нет. Первый запрос извлекает имена столбцов. Цикл foreach сообщает каждое имя. Вы пробовали то, что я опубликовал?
Единственная необходимая информация, которую, как вы сказали, запрашивает ваш веб-сайт, - это имя таблицы.
Итак, я получил ответ на свой вопрос из документации php! Здесь я опубликую фрагмент моего кода, который выполняет "select" SQL-оператор, написанный во время выполнения, который показывает заголовок плюс записи таблицы из результата, который я получил при выполнении запроса.
if (strcmp($words[0], "select")==0) //for making sure its select statement
{
$result= mysqli_query($conn, $sql);
if ($result)
{
echo '<table border=1 style = "border-collaspe=collaspe" class = "table table-striped table-bordered table-hover dataTable no-footer">';
echo '<tr>';
for($i=0;$i<mysqli_num_fields($result);$i++)
{
$column_info=mysqli_fetch_field_direct($result, $i);
/*this function returns all the information about table metioned in the query.
variable i over here refers to field no*/
echo "<th>".$column_info->name."</th>"; //here fetching only name from whole information
}
echo '</tr>';
while ($row = mysqli_fetch_array($result))
{
echo '<tr>';
for($i=0;$i<mysqli_num_fields($result);$i++)
{
echo '<td>'.$row[$i].'</td>';
}
echo '</tr>';
}
echo '</table>';
}
else
{
echo "<script>alert('Error occured, Please check your syntax or internet connection')</script>";
}
}
Для получения подробной информации: Страница документации PHP для функции mysqli_fetch_field_direct (mysqli_result $ result, int $ fieldnr)
Возможный дубликат Запрос MySQL для получения имен столбцов?