<?php
$subQuery = 'SELECT type from my_table UNION ALL SELECT type from my_table';
$query = "EXPLAIN EXTENDED SELECT * FROM ($subQuery) as q WHERE type = ?;";
//$query = "EXPLAIN EXTENDED SELECT * FROM my_view WHERE type = ?;";
$type = 2;
$pdo->setAttribute(PDO::ATTR_EMULATE_PREPARES, true);
$stmt = $pdo->prepare($query);
$stmt->bindParam(1, $type, PDO::PARAM_INT);
$stmt->execute();
$result = $stmt->fetchAll(PDO::FETCH_ASSOC);
echo createTable($result);
$stmt = $pdo->query('SHOW WARNINGS', PDO::FETCH_ASSOC);
$result = $stmt->fetchAll();
echo createTable($result);
$pdo->setAttribute(PDO::ATTR_EMULATE_PREPARES, false);
$stmt = $pdo->prepare($query);
$stmt->bindParam(1, $type, PDO::PARAM_INT);
$stmt->execute();
$result = $stmt->fetchAll(PDO::FETCH_ASSOC);
echo createTable($result);
$stmt = $pdo->query('SHOW WARNINGS', PDO::FETCH_ASSOC);
$result = $stmt->fetchAll();
echo createTable($result);
function createTable($array) {
$horizontal = '─';
$vertical = '│';
$cross = 'o';
$crosses = [
'nw' => '┌',
'n' => '┬',
'ne' => '┐',
'e' => '┤',
'se' => '┘',
's' => '┴',
'sw' => '└',
'w' => '├',
'c' => '┼',
];
// Get the headers (keys of the first element)
$headers = array_keys($array[0]);
// Calculate column widths
$columnWidths = [];
foreach ($headers as $header) {
$columnWidths[$header] = strlen($header);
}
foreach ($array as $row) {
foreach ($row as $key => $value) {
$columnWidths[$key] = max($columnWidths[$key], strlen((string) $value));
}
}
// Build the table
$firstRow = $crosses['nw'];
$headerRow = $vertical;
$middleRow = $crosses['w'];
$lastRow = $crosses['sw'];
foreach ($headers as $header) {
$firstRow .= str_repeat($horizontal, $columnWidths[$header] + 2) . $crosses['n'];
$headerRow .= ' ' . str_pad($header, $columnWidths[$header]) . ' ' . $vertical;
$middleRow .= str_repeat($horizontal, $columnWidths[$header] + 2) . $crosses['c'];
$lastRow .= str_repeat($horizontal, $columnWidths[$header] + 2) . $crosses['s'];
}
$firstRow = mb_substr($firstRow, 0, -1) . $crosses['ne'];
$middleRow = mb_substr($middleRow, 0, -1) . $crosses['e'];
$lastRow = mb_substr($lastRow, 0, -1) . $crosses['se'];
$table = $firstRow . "\n" . $headerRow . "\n" . $middleRow . "\n";
foreach ($array as $row) {
$rowLine = $vertical;
foreach ($headers as $header) {
$rowLine .= ' ' . str_pad((string) $row[$header], $columnWidths[$header]) . ' ' . $vertical;
}
$table .= $rowLine . "\n";
}
$table .= $lastRow . "\n";
return $table;
}
PHP version :
PHP 7.4
PHP 8.0
PHP 8.1
PHP 8.2
PHP 8.3
PHP 8.4
Run PHP Code
Save snippet