HTML gibi bir giriş SQL sorgusu biçimlendirmek için PHP kullanmak?

5 Cevap php

Ne arıyorum böyle bir biçimlendirilmemiş sorgusu alır bir php fonksiyonudur:

$ Sql ​​= "color = fiyat asc tarafından 'yeşil' sipariş şeylerden isim, boyut seçin";

Böyle bir HTML sayfası şey görünür ki:

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

Bu zaten, sanırım oraya bakmak olabilir gelmez phpMyAdmin içinde bazı kod var!

5 Cevap

Ben aynı sorunu vardı ve biçimlendirme / dizim yapmak için hafif bir PHP sınıfı yaptı.

https://github.com/jdorn/sql-formatter

Ben tam karmaşık sorgular (alt-seçer, sendikalar, vb) ile test değil, ama yaygın durumlar için oldukça iyi iş gibi görünüyor.

Tamamen doğru sonuçlar elde etmek için, gerçekten phpMyAdmin kullandığı gibi tam bir SQL ayrıştırıcı gerekiyor, ama bu birçok dosya yayılmış kod 10.000 + hatları kullanan ve basit hata ayıklama için muhtemelen overkill olduğunu.

PhpMyAdmin kullanarak oldukça yalındır:

require 'libraries/common.inc.php';

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

Dizim etkinleştirmek için bir stil ekleyin. Farklı biçimlendirme türleri için sqlparser documentation bulabileceğiniz diğer bazı fonksiyon biraz okursanız.

Sadece bir şey phpMyAdmin SQL ayrıştırma kullanmak sadece biraz büyük olduğunu, bu nedenle diğer tüm işlevleri şerit isteyebilirsiniz ...

Oldukça düzgün bir küçük yardımcı olacağı gibi, üzücü - Ben PECL'de içinde veya benzer yapar herhangi serbestçe kullanılabilir kod var sanmıyorum. (Sadece oldukça sınırlı kullanımları ile de olsa.)

Gibi, size kendi sorusunu yanıtladı konum - phpMyAdmin muhtemelen çağrı bir iyi bir ilk limanıdır.

Böyle bir şey çalışacaktır - ayrıştırmak istediğiniz diğer SQL anahtar kelimeler ekleyebilirsiniz:

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;
}

Bu ne istediğiniz olabilir: http://www.orczhou.com/sqlparser/ PHP SQL Format