我所尋找的是一個PHP函數,它是這樣一個未格式化的問題:「從那裏的顏色=‘綠色’按價格升序順序選擇的東西名稱,大小」使用PHP將輸入SQL查詢格式化爲HTML?
$ SQL =;
,這樣它會出現在HTML頁面是這樣的:
SELECT name, size FROM things WHERE color = 'green' ORDER BY price ASC';
裏面有phpMyAdmin的一些代碼,已經做了這個,我可以看看在那裏,我猜!
我所尋找的是一個PHP函數,它是這樣一個未格式化的問題:「從那裏的顏色=‘綠色’按價格升序順序選擇的東西名稱,大小」使用PHP將輸入SQL查詢格式化爲HTML?
$ SQL =;
,這樣它會出現在HTML頁面是這樣的:
SELECT name, size FROM things WHERE color = 'green' ORDER BY price ASC';
裏面有phpMyAdmin的一些代碼,已經做了這個,我可以看看在那裏,我猜!
我有同樣的問題,並做了一個輕量級的PHP類來做格式/語法突出顯示。
https://github.com/jdorn/sql-formatter
我還沒有完全與複雜的查詢(子選擇,工會等)的測試,但它似乎工作得很好了常見的情況。
爲了獲得完全準確的結果,您確實需要一個完整的SQL解析器,如phpMyAdmin使用,但是它使用了超過許多文件的10,000多行代碼,並且可能用於簡單調試。
美麗!在我的sql builder中使用來顯示結果。完美的作品,只需插入即可使用 – Luke 2013-02-21 00:03:17
太棒了!來自哥倫比亞的問候。 – JuanFernandoz 2015-10-12 18:27:11
太棒了!我希望我能給一個以上的選票。我想知道這個答案是不被接受的。 – 2016-07-02 12:02:33
我不認爲在PECL或類似內部有任何可以自由使用的代碼 - 這很遺憾,因爲它將是一個相當整潔的小實用程序。 (儘管只有相當有限的用途。)
因此,你回答你自己的問題 - phpMyAdmin可能是一個很好的第一停靠點。
像這樣的事情會工作 - 添加要分析任何其他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;
}
使用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解析,所以你可能要去除所有其他功能...
我試過這個,但發現它遠非直截了當,最終放棄了。 – 2010-02-27 12:48:06
我在phpmyadmin目錄中自己嘗試了這個例子(通過創建一個test.php),它對我很有用。 – Veger 2010-02-28 19:34:13
好的,我現在通過將腳本保存在/ usr/share/phpmyadmin /並從/ phpmyadmin /在瀏覽器中打開腳本來獲取腳本。正如你所說的,我將不得不在文檔中進行深入研究,以獲得更好的格式。它並不像我所希望的那麼直截了當,但非常感謝這些指針。 – 2010-03-02 02:26:16
function getFormattedSQL($sql_raw)
{
if(empty($sql_raw) || !is_string($sql_raw))
{
return false;
}
$sql_reserved_all = array (
'ACCESSIBLE', 'ACTION', 'ADD', 'AFTER', 'AGAINST', 'AGGREGATE', 'ALGORITHM', 'ALL', 'ALTER', 'ANALYSE', 'ANALYZE', 'AND', 'AS', 'ASC',
'AUTOCOMMIT', 'AUTO_INCREMENT', 'AVG_ROW_LENGTH', 'BACKUP', 'BEGIN', 'BETWEEN', 'BINLOG', 'BOTH', 'BY', 'CASCADE', 'CASE', 'CHANGE', 'CHANGED',
'CHARSET', 'CHECK', 'CHECKSUM', 'COLLATE', 'COLLATION', 'COLUMN', 'COLUMNS', 'COMMENT', 'COMMIT', 'COMMITTED', 'COMPRESSED', 'CONCURRENT',
'CONSTRAINT', 'CONTAINS', 'CONVERT', 'CREATE', 'CROSS', 'CURRENT_TIMESTAMP', 'DATABASE', 'DATABASES', 'DAY', 'DAY_HOUR', 'DAY_MINUTE',
'DAY_SECOND', 'DEFINER', 'DELAYED', 'DELAY_KEY_WRITE', 'DELETE', 'DESC', 'DESCRIBE', 'DETERMINISTIC', 'DISTINCT', 'DISTINCTROW', 'DIV',
'DO', 'DROP', 'DUMPFILE', 'DUPLICATE', 'DYNAMIC', 'ELSE', 'ENCLOSED', 'END', 'ENGINE', 'ENGINES', 'ESCAPE', 'ESCAPED', 'EVENTS', 'EXECUTE',
'EXISTS', 'EXPLAIN', 'EXTENDED', 'FAST', 'FIELDS', 'FILE', 'FIRST', 'FIXED', 'FLUSH', 'FOR', 'FORCE', 'FOREIGN', 'FROM', 'FULL', 'FULLTEXT',
'FUNCTION', 'GEMINI', 'GEMINI_SPIN_RETRIES', 'GLOBAL', 'GRANT', 'GRANTS', 'GROUP', 'HAVING', 'HEAP', 'HIGH_PRIORITY', 'HOSTS', 'HOUR', 'HOUR_MINUTE',
'HOUR_SECOND', 'IDENTIFIED', 'IF', 'IGNORE', 'IN', 'INDEX', 'INDEXES', 'INFILE', 'INNER', 'INSERT', 'INSERT_ID', 'INSERT_METHOD', 'INTERVAL',
'INTO', 'INVOKER', 'IS', 'ISOLATION', 'JOIN', 'KEY', 'KEYS', 'KILL', 'LAST_INSERT_ID', 'LEADING', 'LEFT', 'LEVEL', 'LIKE', 'LIMIT', 'LINEAR',
'LINES', 'LOAD', 'LOCAL', 'LOCK', 'LOCKS', 'LOGS', 'LOW_PRIORITY', 'MARIA', 'MASTER', 'MASTER_CONNECT_RETRY', 'MASTER_HOST', 'MASTER_LOG_FILE',
'MASTER_LOG_POS', 'MASTER_PASSWORD', 'MASTER_PORT', 'MASTER_USER', 'MATCH', 'MAX_CONNECTIONS_PER_HOUR', 'MAX_QUERIES_PER_HOUR',
'MAX_ROWS', 'MAX_UPDATES_PER_HOUR', 'MAX_USER_CONNECTIONS', 'MEDIUM', 'MERGE', 'MINUTE', 'MINUTE_SECOND', 'MIN_ROWS', 'MODE', 'MODIFY',
'MONTH', 'MRG_MYISAM', 'MYISAM', 'NAMES', 'NATURAL', 'NOT', 'NULL', 'OFFSET', 'ON', 'OPEN', 'OPTIMIZE', 'OPTION', 'OPTIONALLY', 'OR',
'ORDER', 'OUTER', 'OUTFILE', 'PACK_KEYS', 'PAGE', 'PARTIAL', 'PARTITION', 'PARTITIONS', 'PASSWORD', 'PRIMARY', 'PRIVILEGES', 'PROCEDURE',
'PROCESS', 'PROCESSLIST', 'PURGE', 'QUICK', 'RAID0', 'RAID_CHUNKS', 'RAID_CHUNKSIZE', 'RAID_TYPE', 'RANGE', 'READ', 'READ_ONLY',
'READ_WRITE', 'REFERENCES', 'REGEXP', 'RELOAD', 'RENAME', 'REPAIR', 'REPEATABLE', 'REPLACE', 'REPLICATION', 'RESET', 'RESTORE', 'RESTRICT',
'RETURN', 'RETURNS', 'REVOKE', 'RIGHT', 'RLIKE', 'ROLLBACK', 'ROW', 'ROWS', 'ROW_FORMAT', 'SECOND', 'SECURITY', 'SELECT', 'SEPARATOR',
'SERIALIZABLE', 'SESSION', 'SET', 'SHARE', 'SHOW', 'SHUTDOWN', 'SLAVE', 'SONAME', 'SOUNDS', 'SQL', 'SQL_AUTO_IS_NULL', 'SQL_BIG_RESULT',
'SQL_BIG_SELECTS', 'SQL_BIG_TABLES', 'SQL_BUFFER_RESULT', 'SQL_CACHE', 'SQL_CALC_FOUND_ROWS', 'SQL_LOG_BIN', 'SQL_LOG_OFF',
'SQL_LOG_UPDATE', 'SQL_LOW_PRIORITY_UPDATES', 'SQL_MAX_JOIN_SIZE', 'SQL_NO_CACHE', 'SQL_QUOTE_SHOW_CREATE', 'SQL_SAFE_UPDATES',
'SQL_SELECT_LIMIT', 'SQL_SLAVE_SKIP_COUNTER', 'SQL_SMALL_RESULT', 'SQL_WARNINGS', 'START', 'STARTING', 'STATUS', 'STOP', 'STORAGE',
'STRAIGHT_JOIN', 'STRING', 'STRIPED', 'SUPER', 'TABLE', 'TABLES', 'TEMPORARY', 'TERMINATED', 'THEN', 'TO', 'TRAILING', 'TRANSACTIONAL',
'TRUNCATE', 'TYPE', 'TYPES', 'UNCOMMITTED', 'UNION', 'UNIQUE', 'UNLOCK', 'UPDATE', 'USAGE', 'USE', 'USING', 'VALUES', 'VARIABLES',
'VIEW', 'WHEN', 'WHERE', 'WITH', 'WORK', 'WRITE', 'XOR', 'YEAR_MONTH'
);
$sql_skip_reserved_words = array('AS', 'ON', 'USING');
$sql_special_reserved_words = array('(', ')');
$sql_raw = str_replace("\n", " ", $sql_raw);
$sql_formatted = "";
$prev_word = "";
$word = "";
for($i=0, $j = strlen($sql_raw); $i < $j; $i++)
{
$word .= $sql_raw[$i];
$word_trimmed = trim($word);
if($sql_raw[$i] == " " || in_array($sql_raw[$i], $sql_special_reserved_words))
{
$word_trimmed = trim($word);
$trimmed_special = false;
if(in_array($sql_raw[$i], $sql_special_reserved_words))
{
$word_trimmed = substr($word_trimmed, 0, -1);
$trimmed_special = true;
}
$word_trimmed = strtoupper($word_trimmed);
if(in_array($word_trimmed, $sql_reserved_all) && !in_array($word_trimmed, $sql_skip_reserved_words))
{
if(in_array($prev_word, $sql_reserved_all))
{
$sql_formatted .= '<b>'.strtoupper(trim($word)).'</b>'.' ';
}
else
{
$sql_formatted .= '<br/> ';
$sql_formatted .= '<b>'.strtoupper(trim($word)).'</b>'.' ';
}
$prev_word = $word_trimmed;
$word = "";
}
else
{
$sql_formatted .= trim($word).' ';
$prev_word = $word_trimmed;
$word = "";
}
}
}
$sql_formatted .= trim($word);
return $sql_formatted;
}
可能這是你想要什麼:http://www.orczhou.com/sqlparser/ PHP SQL格式
function sql_format($query) {
$keywords = array("select", "from", "where", "order by", "group by", "insert into", "update","SET", ",");
foreach ($keywords as $keyword) {
if (preg_match("/($keyword *)/i", ",", $matches)) {
$query = str_replace($matches[1],strtoupper($matches[1]) . "<br/> ", $query);
}
else if(preg_match("/($keyword *)/i", $query, $matches)) {
$query = str_replace($matches[1],"<br>".strtoupper($matches[1]) . "<br/> ", $query);
}
}
return $query;
}
你可以......問題是什麼? – 2010-01-16 19:43:48