Highlight SQL
Wanneer er een fout optreed in een query is het misschien handig op deze query lezer-vriendelijk op het scherm te zetten.
Daarom heb ik (bij gebrek aan het vinden van wat beters) deze functie geschreven die een query string netjes highlight en opbreekt in regels.
De code voegd css-classes toe aan de content, zodat je deze naar eigen inzicht kunt stijlen.
Werking:
Code (php)
1
2
3
4
5
6
2
3
4
5
6
<?php
$query = "SELECT `table`.`column`, column FROM table;";
echo highlight_sql($query);
?>
$query = "SELECT `table`.`column`, column FROM table;";
echo highlight_sql($query);
?>
Voorbeeld: http://www.pholeron.nl/projects/highlight_sql/index.php
Gesponsorde koppelingen
PHP script bestanden
35 reacties op 'Highlight SQL'
Gesponsorde koppelingen
Maar niemand zet natuurlijk zoveel haakjes om zn statement (waarom zou je!) Als je dan een normale query erin gooit (wat er in j voorbeeld staat slaat natuurlijk nergens op) zijn het alleen een paar enters die je toevoegt... Voor keywords een enter. Weinig spannend dus.
Je kan je inArray functie een stuk makkelijker maken. Je kan nl. gewoon in_array() gebruiken op een strolower(needle) en een array_map('strtolower', haystack) . Dan benut je wel de snelheid en efficientie van Cpp en toch heb je case insensitive.
Als ik deze query invul op je site:
"SELECT `a`, `b`, `c` FROM `table` WHERE `having` = 'value' AND `e` = 'value' GROUP BY `f` ORDER BY `g` ASC LIMIT 10;"
komt er dit uit
"SELECT `a`, `b`, `c`
FROM `table`
WHERE `having` = 'value'
AND `e` = 'value'
GROUP BY `f`
ORDER BY `g`
ASC
LIMIT 10;"
Met kleurtjes dus. Die ASC is een beetje vreemd, denk je niet?
Je kan je inArray functie een stuk makkelijker maken. Je kan nl. gewoon in_array() gebruiken op een strolower(needle) en een array_map('strtolower', haystack) . Dan benut je wel de snelheid en efficientie van Cpp en toch heb je case insensitive.
Als ik deze query invul op je site:
"SELECT `a`, `b`, `c` FROM `table` WHERE `having` = 'value' AND `e` = 'value' GROUP BY `f` ORDER BY `g` ASC LIMIT 10;"
komt er dit uit
"SELECT `a`, `b`, `c`
FROM `table`
WHERE `having` = 'value'
AND `e` = 'value'
GROUP BY `f`
ORDER BY `g`
ASC
LIMIT 10;"
Met kleurtjes dus. Die ASC is een beetje vreemd, denk je niet?
Goed script ga ik zeker gebruiken(Y).
Een klein dingetje:
Misschien kan je jouw inArray aanpassen naar dit:
Als needle ook een array mag zijn:
Als needle geen array mag zijn:
Dan heb je er ook strict bij zitten ( mocht je dit nodig hebben ) en de code is een stukje korten en misschien ook efficienter(?).
Edit: heb even getest, maar jou inArray is een stuk sneller dan die ik gaf, dus die van jou is prima:P
Een klein dingetje:
Misschien kan je jouw inArray aanpassen naar dit:
Als needle ook een array mag zijn:
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
<?php
function myInArray ( $needle, $haystack, $strict = false, $case = false ) {
$result = false;
$func = ($case) ? 'strcmp' : 'strcasecmp' ;
if ( is_array ( $needle ) ) {
foreach($haystack as $bale) {
if ( ($strict && (array_uintersect_uassoc($needle, $bale, $func, $func) === $needle)) ||
(!$strict && (array_uintersect($needle, $bale, $func) === $needle))
) {
$result = true;
break;
}
}
} else {
$tmp = array_values ( array_uintersect ( $haystack, array($needle), $func) );
$result = !$strict || (isset ( $tmp[0] ) && (gettype($needle) == gettype($tmp[0])));
}
return $result;
}
?>
function myInArray ( $needle, $haystack, $strict = false, $case = false ) {
$result = false;
$func = ($case) ? 'strcmp' : 'strcasecmp' ;
if ( is_array ( $needle ) ) {
foreach($haystack as $bale) {
if ( ($strict && (array_uintersect_uassoc($needle, $bale, $func, $func) === $needle)) ||
(!$strict && (array_uintersect($needle, $bale, $func) === $needle))
) {
$result = true;
break;
}
}
} else {
$tmp = array_values ( array_uintersect ( $haystack, array($needle), $func) );
$result = !$strict || (isset ( $tmp[0] ) && (gettype($needle) == gettype($tmp[0])));
}
return $result;
}
?>
Als needle geen array mag zijn:
Code (php)
1
2
3
4
5
6
7
8
9
10
2
3
4
5
6
7
8
9
10
Dan heb je er ook strict bij zitten ( mocht je dit nodig hebben ) en de code is een stukje korten en misschien ook efficienter(?).
Edit: heb even getest, maar jou inArray is een stuk sneller dan die ik gaf, dus die van jou is prima:P
@stien
Ik heb na lang zoeken nog een andere variant van mn inArray functie gevonden.. misschien ook interessant..
De strict optie vind ik doorgaans minder interessant omdat ik deze functie doorgaans gebruik voor string matches.. het feit dat (1 !== "1") vind ik niet echt relevant in m'n functie. Sterker nog, 'k heb het juist liever dat ze juist wel matchen.
Maar euhm, wat vind je hier van?
Ik heb na lang zoeken nog een andere variant van mn inArray functie gevonden.. misschien ook interessant..
De strict optie vind ik doorgaans minder interessant omdat ik deze functie doorgaans gebruik voor string matches.. het feit dat (1 !== "1") vind ik niet echt relevant in m'n functie. Sterker nog, 'k heb het juist liever dat ze juist wel matchen.
Maar euhm, wat vind je hier van?
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
<?php
// Nagenoeg dezelfde als in_array, maar dan met de mogelijk om NIET 'case sensitive' te zoeken, tevens de optie voor een fullmatch, of een gedeeltelijke match
function inArray($string, $array, $bCaseSensitive = false, $bFullMatch = true)
{
if($bCaseSensitive)
{
if($bFullMatch)
{
// return in_array($string, $array);
foreach($array AS $key => $val)
{
if(strcmp($val, $string) === 0)
{
return true;
}
}
}
else
{
foreach($array AS $key => $val)
{
if(strstr($val, $string) !== false)
{
return true;
}
}
}
}
else
{
if($bFullMatch)
{
foreach($array AS $key => $val)
{
if(strcasecmp($val, $string) === 0)
{
return true;
}
}
}
else
{
foreach($array AS $key => $val)
{
if(stristr($val, $string) !== false)
{
return true;
}
}
}
}
return false;
}
?>
// Nagenoeg dezelfde als in_array, maar dan met de mogelijk om NIET 'case sensitive' te zoeken, tevens de optie voor een fullmatch, of een gedeeltelijke match
function inArray($string, $array, $bCaseSensitive = false, $bFullMatch = true)
{
if($bCaseSensitive)
{
if($bFullMatch)
{
// return in_array($string, $array);
foreach($array AS $key => $val)
{
if(strcmp($val, $string) === 0)
{
return true;
}
}
}
else
{
foreach($array AS $key => $val)
{
if(strstr($val, $string) !== false)
{
return true;
}
}
}
}
else
{
if($bFullMatch)
{
foreach($array AS $key => $val)
{
if(strcasecmp($val, $string) === 0)
{
return true;
}
}
}
else
{
foreach($array AS $key => $val)
{
if(stristr($val, $string) !== false)
{
return true;
}
}
}
}
return false;
}
?>
@Pholeron, kan ook wel handig zijn zoiets, maar dan zou ik het zou coderen, is wat korter:
En wat betreft die strict parameter, heb je eigenlijk helemaal gelijk in. Ik gebruik em zelf ook nooit, maar wilde me zoveel mogelijk aan de specificatie van php.net houden:P
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
<?php
function inArray($needle, $haystack, $case_sensitive = false, $full = true) {
if ( $full ) {
$func = ($case_sensitive) ? 'strcmp' : 'strcasecmp';
$ret = 0;
} else {
$func = ($case_sensitive) ? 'strstr' : 'stristr';
$ret = false;
}
foreach($haystack as $key => $val) {
if ( call_user_func($func, $val, $needle) === $ret) {
return true;
}
}
return false;
}
?>
function inArray($needle, $haystack, $case_sensitive = false, $full = true) {
if ( $full ) {
$func = ($case_sensitive) ? 'strcmp' : 'strcasecmp';
$ret = 0;
} else {
$func = ($case_sensitive) ? 'strstr' : 'stristr';
$ret = false;
}
foreach($haystack as $key => $val) {
if ( call_user_func($func, $val, $needle) === $ret) {
return true;
}
}
return false;
}
?>
En wat betreft die strict parameter, heb je eigenlijk helemaal gelijk in. Ik gebruik em zelf ook nooit, maar wilde me zoveel mogelijk aan de specificatie van php.net houden:P
@Jonathan
Wat doet ie dan niet? Dat ie een kleurtje krijgt? Een kwestie van de default kleur anders CSS'en lijkt me (: Of wat bedoel je? Hoe had je ut liever gezien? (meer feedback graag (:
De code had idd korter gemogen, maar 'k ben nog niet echt een held met RegEx, maar als je suggesties hebt zonder dat daarbij de functionaliteit wordt aangepast hoor ik dat heel graag!
@Jan & Leroy
Tnx (:
Quote:
als je value,kolom,tabel zonder ' doet wil t niej.
Wat doet ie dan niet? Dat ie een kleurtje krijgt? Een kwestie van de default kleur anders CSS'en lijkt me (: Of wat bedoel je? Hoe had je ut liever gezien? (meer feedback graag (:
De code had idd korter gemogen, maar 'k ben nog niet echt een held met RegEx, maar als je suggesties hebt zonder dat daarbij de functionaliteit wordt aangepast hoor ik dat heel graag!
@Jan & Leroy
Tnx (:
Erg mooi script. Denk niet veel op aan te merken en idd. de css moet je zelf maar aanpassen naar wens.
Grtz.
Quote:
PHP Newbie
Of bas deze parser in het forum in laten bouwen ;-)
Vind ik nou nog eens een goed idee, bouw het in in het forum of maak er een aparte pagina voor, MySQL Query test of zoiets.
Of bas deze parser in het forum in laten bouwen ;-)
Vind ik nou nog eens een goed idee, bouw het in in het forum of maak er een aparte pagina voor, MySQL Query test of zoiets.
Grtz.
'k heb (n.a.v. Jim) wat 'keywords' toegevoegd.
Tevens heb ik de opbouw van de keyword-array aangepast zodat deze nog flexibeler is..
Ook de regex is wat aangepast zodat deze de data nog beter in de juiste stukjes weet te hakken
Ook (aaneengesloten) spaties/enters/tabs/e.d. worden nu netjes afgevangen en vervangen voor 1 spatie.
Tevens heb ik de opbouw van de keyword-array aangepast zodat deze nog flexibeler is..
Ook de regex is wat aangepast zodat deze de data nog beter in de juiste stukjes weet te hakken
Ook (aaneengesloten) spaties/enters/tabs/e.d. worden nu netjes afgevangen en vervangen voor 1 spatie.
Euh, lol.. ik zit net ff te zoeken naar 'sql highlight' in google, staat deze pagina al boven aan :P
highlight sql
highlight sql
Je kan wellicht ook de keyword's uit MySQL zelf laten halen.
(Mist je toegang hebt tot de mysql database zelf.) Hierin staat een tabel genaamd help_keyword bestaande uit 2 kolommen (help_keyword_id en name) in name staan alle mogelijke keywords welke mysql ondersteund.
EDIT:
En tevens kan je dan ook de functie's van mysql gebruiken, nu worden deze iets wat minder overzichtelijk omdat er naar haakjes wordt gekeken.
DB: mysql TAB: help_topic COLUMN: name.
(Mist je toegang hebt tot de mysql database zelf.) Hierin staat een tabel genaamd help_keyword bestaande uit 2 kolommen (help_keyword_id en name) in name staan alle mogelijke keywords welke mysql ondersteund.
EDIT:
En tevens kan je dan ook de functie's van mysql gebruiken, nu worden deze iets wat minder overzichtelijk omdat er naar haakjes wordt gekeken.
DB: mysql TAB: help_topic COLUMN: name.
Er zitten zoveel 1000den keywords in mysql, ik richt me hier alleen op de meest gebruikte.. maar zoals je ziet kun je vrij eenvoudig zelf nieuwe keywords toevoegen.
Wat betreft het zoeken naar functies vind ik wel een goede toevoeging..
Je zou dan bijv. deze regel kunnen opnemen:
zodat deze gestijlt wordt met de css class 'function'. Probleem krijg je dan met de haakjes. Het script moet dan onderscheid gaan maken tussen functie-haakjes en groeperings-haakjes. Suggesties hoe je dat het liefgste zou zien? Ik ga er dadelijk es over slapen :P
Wat betreft het zoeken naar functies vind ik wel een goede toevoeging..
Je zou dan bijv. deze regel kunnen opnemen:
zodat deze gestijlt wordt met de css class 'function'. Probleem krijg je dan met de haakjes. Het script moet dan onderscheid gaan maken tussen functie-haakjes en groeperings-haakjes. Suggesties hoe je dat het liefgste zou zien? Ik ga er dadelijk es over slapen :P
Om te reageren heb je een account nodig en je moet ingelogd zijn.
- Details
Door:
Martijn Wieringa- 6 jaar geleden
- 1.099 x bekeken
- Labels
- Geen tags toegevoegd.
- PHP scripts opties
- PHP algemeen
- Nieuwste PHP scripts
- PHP script toevoegen


PHP hulp
0 seconden vanaf nu