3v4l.org

run code in 300+ PHP versions simultaneously
<?php 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>'.'&nbsp;'; } else { $sql_formatted .= '<br/>&nbsp;'; $sql_formatted .= '<b>'.strtoupper(trim($word)).'</b>'.'&nbsp;'; } $prev_word = $word_trimmed; $word = ""; } else { $sql_formatted .= trim($word).'&nbsp;'; $prev_word = $word_trimmed; $word = ""; } } } $sql_formatted .= trim($word); return $sql_formatted; } echo getFormattedSQL("SELECT * FROM someTableName WHERE 1=1 AND name = 'foo';");
Finding entry points
Branch analysis from position: 0
1 jumps found. (Code = 62) Position 1 = -2
filename:       /in/ifYP2
function name:  (null)
number of ops:  5
compiled vars:  none
line      #* E I O op                           fetch          ext  return  operands
-------------------------------------------------------------------------------------
   98     0  E >   INIT_FCALL                                               'getformattedsql'
          1        SEND_VAL                                                 'SELECT+%2A+FROM+someTableName+WHERE+1%3D1+AND+name+%3D+%27foo%27%3B'
          2        DO_FCALL                                      0  $0      
          3        ECHO                                                     $0
          4      > RETURN                                                   1

Function getformattedsql:
Finding entry points
Branch analysis from position: 0
2 jumps found. (Code = 47) Position 1 = 3, Position 2 = 6
Branch analysis from position: 3
2 jumps found. (Code = 43) Position 1 = 7, Position 2 = 8
Branch analysis from position: 7
1 jumps found. (Code = 62) Position 1 = -2
Branch analysis from position: 8
1 jumps found. (Code = 42) Position 1 = 112
Branch analysis from position: 112
2 jumps found. (Code = 44) Position 1 = 114, Position 2 = 24
Branch analysis from position: 114
1 jumps found. (Code = 62) Position 1 = -2
Branch analysis from position: 24
2 jumps found. (Code = 47) Position 1 = 33, Position 2 = 39
Branch analysis from position: 33
2 jumps found. (Code = 43) Position 1 = 40, Position 2 = 111
Branch analysis from position: 40
2 jumps found. (Code = 43) Position 1 = 51, Position 2 = 58
Branch analysis from position: 51
2 jumps found. (Code = 46) Position 1 = 67, Position 2 = 73
Branch analysis from position: 67
2 jumps found. (Code = 43) Position 1 = 74, Position 2 = 104
Branch analysis from position: 74
2 jumps found. (Code = 43) Position 1 = 79, Position 2 = 90
Branch analysis from position: 79
1 jumps found. (Code = 42) Position 1 = 101
Branch analysis from position: 101
1 jumps found. (Code = 42) Position 1 = 111
Branch analysis from position: 111
2 jumps found. (Code = 44) Position 1 = 114, Position 2 = 24
Branch analysis from position: 114
Branch analysis from position: 24
Branch analysis from position: 90
1 jumps found. (Code = 42) Position 1 = 111
Branch analysis from position: 111
Branch analysis from position: 104
2 jumps found. (Code = 44) Position 1 = 114, Position 2 = 24
Branch analysis from position: 114
Branch analysis from position: 24
Branch analysis from position: 73
Branch analysis from position: 58
Branch analysis from position: 111
Branch analysis from position: 39
Branch analysis from position: 6
filename:       /in/ifYP2
function name:  getFormattedSQL
number of ops:  120
compiled vars:  !0 = $sql_raw, !1 = $sql_reserved_all, !2 = $sql_skip_reserved_words, !3 = $sql_special_reserved_words, !4 = $sql_formatted, !5 = $prev_word, !6 = $word, !7 = $i, !8 = $j, !9 = $word_trimmed, !10 = $trimmed_special
line      #* E I O op                           fetch          ext  return  operands
-------------------------------------------------------------------------------------
    3     0  E >   RECV                                             !0      
    5     1        ISSET_ISEMPTY_CV                                 ~11     !0
          2      > JMPNZ_EX                                         ~11     ~11, ->6
          3    >   TYPE_CHECK                                   64  ~12     !0
          4        BOOL_NOT                                         ~13     ~12
          5        BOOL                                             ~11     ~13
          6    > > JMPZ                                                     ~11, ->8
    7     7    > > RETURN                                                   <false>
   10     8    >   ASSIGN                                                   !1, <array>
   38     9        ASSIGN                                                   !2, <array>
   39    10        ASSIGN                                                   !3, <array>
   41    11        INIT_FCALL                                               'str_replace'
         12        SEND_VAL                                                 '%0A'
         13        SEND_VAL                                                 '+'
         14        SEND_VAR                                                 !0
         15        DO_ICALL                                         $17     
         16        ASSIGN                                                   !0, $17
   43    17        ASSIGN                                                   !4, ''
   45    18        ASSIGN                                                   !5, ''
   46    19        ASSIGN                                                   !6, ''
   48    20        ASSIGN                                                   !7, 0
         21        STRLEN                                           ~23     !0
         22        ASSIGN                                                   !8, ~23
         23      > JMP                                                      ->112
   50    24    >   FETCH_DIM_R                                      ~25     !0, !7
         25        ASSIGN_OP                                     8          !6, ~25
   52    26        INIT_FCALL                                               'trim'
         27        SEND_VAR                                                 !6
         28        DO_ICALL                                         $27     
         29        ASSIGN                                                   !9, $27
   54    30        FETCH_DIM_R                                      ~29     !0, !7
         31        IS_EQUAL                                         ~30     ~29, '+'
         32      > JMPNZ_EX                                         ~30     ~30, ->39
         33    >   INIT_FCALL                                               'in_array'
         34        FETCH_DIM_R                                      ~31     !0, !7
         35        SEND_VAL                                                 ~31
         36        SEND_VAR                                                 !3
         37        DO_ICALL                                         $32     
         38        BOOL                                             ~30     $32
         39    > > JMPZ                                                     ~30, ->111
   56    40    >   INIT_FCALL                                               'trim'
         41        SEND_VAR                                                 !6
         42        DO_ICALL                                         $33     
         43        ASSIGN                                                   !9, $33
   58    44        ASSIGN                                                   !10, <false>
   60    45        INIT_FCALL                                               'in_array'
         46        FETCH_DIM_R                                      ~36     !0, !7
         47        SEND_VAL                                                 ~36
         48        SEND_VAR                                                 !3
         49        DO_ICALL                                         $37     
         50      > JMPZ                                                     $37, ->58
   62    51    >   INIT_FCALL                                               'substr'
         52        SEND_VAR                                                 !9
         53        SEND_VAL                                                 0
         54        SEND_VAL                                                 -1
         55        DO_ICALL                                         $38     
         56        ASSIGN                                                   !9, $38
   63    57        ASSIGN                                                   !10, <true>
   66    58    >   INIT_FCALL                                               'strtoupper'
         59        SEND_VAR                                                 !9
         60        DO_ICALL                                         $41     
         61        ASSIGN                                                   !9, $41
   68    62        INIT_FCALL                                               'in_array'
         63        SEND_VAR                                                 !9
         64        SEND_VAR                                                 !1
         65        DO_ICALL                                         $43     
         66      > JMPZ_EX                                          ~44     $43, ->73
         67    >   INIT_FCALL                                               'in_array'
         68        SEND_VAR                                                 !9
         69        SEND_VAR                                                 !2
         70        DO_ICALL                                         $45     
         71        BOOL_NOT                                         ~46     $45
         72        BOOL                                             ~44     ~46
         73    > > JMPZ                                                     ~44, ->104
   70    74    >   INIT_FCALL                                               'in_array'
         75        SEND_VAR                                                 !5
         76        SEND_VAR                                                 !1
         77        DO_ICALL                                         $47     
         78      > JMPZ                                                     $47, ->90
   72    79    >   INIT_FCALL                                               'strtoupper'
         80        INIT_FCALL                                               'trim'
         81        SEND_VAR                                                 !6
         82        DO_ICALL                                         $48     
         83        SEND_VAR                                                 $48
         84        DO_ICALL                                         $49     
         85        CONCAT                                           ~50     '%3Cb%3E', $49
         86        CONCAT                                           ~51     ~50, '%3C%2Fb%3E'
         87        CONCAT                                           ~52     ~51, '%26nbsp%3B'
         88        ASSIGN_OP                                     8          !4, ~52
         89      > JMP                                                      ->101
   76    90    >   ASSIGN_OP                                     8          !4, '%3Cbr%2F%3E%26nbsp%3B'
   77    91        INIT_FCALL                                               'strtoupper'
         92        INIT_FCALL                                               'trim'
         93        SEND_VAR                                                 !6
         94        DO_ICALL                                         $55     
         95        SEND_VAR                                                 $55
         96        DO_ICALL                                         $56     
         97        CONCAT                                           ~57     '%3Cb%3E', $56
         98        CONCAT                                           ~58     ~57, '%3C%2Fb%3E'
         99        CONCAT                                           ~59     ~58, '%26nbsp%3B'
        100        ASSIGN_OP                                     8          !4, ~59
   80   101    >   ASSIGN                                                   !5, !9
   81   102        ASSIGN                                                   !6, ''
        103      > JMP                                                      ->111
   85   104    >   INIT_FCALL                                               'trim'
        105        SEND_VAR                                                 !6
        106        DO_ICALL                                         $63     
        107        CONCAT                                           ~64     $63, '%26nbsp%3B'
        108        ASSIGN_OP                                     8          !4, ~64
   87   109        ASSIGN                                                   !5, !9
   88   110        ASSIGN                                                   !6, ''
   48   111    >   PRE_INC                                                  !7
        112    >   IS_SMALLER                                               !7, !8
        113      > JMPNZ                                                    ~69, ->24
   93   114    >   INIT_FCALL                                               'trim'
        115        SEND_VAR                                                 !6
        116        DO_ICALL                                         $70     
        117        ASSIGN_OP                                     8          !4, $70
   95   118      > RETURN                                                   !4
   96   119*     > RETURN                                                   null

End of function getformattedsql

Generated using Vulcan Logic Dumper, using php 8.0.0


preferences:
151.11 ms | 1411 KiB | 24 Q