Использовать PHP, чтобы отформатировать вход вопрос SQL как HTML?

То, что я ищу, является функцией php, которая берет неотформатированный вопрос как это:

$sql = «выбирают имя, размер от вещей где цвет = 'зеленый' заказ ценой asc»;

так, чтобы это появилось бы на странице HTML что-то вроде этого:

SELECT
    name, size
FROM
    things
WHERE
    color = 'green'
ORDER BY
    price ASC';

Есть некоторый кодекс внутри phpMyAdmin, который уже делает это, я мог посмотреть там, я предполагаю!

8
задан Simon Nuttall 16 January 2010 в 19:30
поделиться

3 ответа

Использование PHPMYADMIN довольно прямо вперед:

require 'libraries/common.inc.php';

$sql= "select * from test";
$parsed_sql = PMA_SQP_parse($sql);    
echo PMA_SQP_formatHtml($parsed_sql);

Добавьте таблицу стилей для включения синтаксиса выделения. Если вы читаете немного в документации SQLParser Documentation , вы найдете некоторую другую функцию для различных типов форматирования.

Только то, что phpmyadmin несколько большим, чтобы использовать только разбор SQL, поэтому вы можете захотеть разбить все остальные функции ...

6
ответ дан 5 December 2019 в 04:39
поделиться

Я не думаю, что есть какой-либо свободно доступный код, который делает это в PECL или аналогично - это жаль, так как было бы довольно мало утилите. (Хотя и только с довольно ограниченным использованием.)

Как таковой, вы ответили вам собственный вопрос - phpmyadmin, вероятно, хороший первый порт вызова.

1
ответ дан 5 December 2019 в 04:39
поделиться

Что-то вроде этого будет работать - добавьте любые другие ключевые слова SQL, которые вы хотите разобраться:

function sql_format($query) {
  $keywords = array("select", "from", "where", "order by", "group by", "insert into", "update");
  foreach ($keywords as $keyword) {
    if (preg_match("/($keyword *)/i", $query, $matches)) {
      $query = str_replace($matches[1], "\n" . strtoupper($matches[1]) . "\n  ", $query);
    }
  }
  return $query;
}
1
ответ дан 5 December 2019 в 04:39
поделиться
Другие вопросы по тегам:

Похожие вопросы: