Archive for the ‘Programiranje’ Category

2 regEx linka :)

Friday, February 8th, 2008

http://www.perl.com/doc/manual/html/pod/perlre.html
http://www.somacon.com/p127.php

sicer verjetno za večino nekoristna … ampak sem jaz trenutno v fazi učenja regExa, tako da če ne druga sem ju postal zase, ker imam že ČISTO polno namizje pa tudi vrstica z zaznamki si podaljšuje že v 3 krasne … Smile

Datoteke samo za …

Saturday, November 24th, 2007

Recimo da imate eno mapo v kateri imate datoteke do katerih lahko dostopajo le nekateri, recimo samo administratorji ali pa samo registrirani uporabniki. Seveda je to rešljivo z .htaccess vendar nevem kako velik bi bil file, pa tudi administracija bi bila po domače, v ku*cu Smile.

Da pa se zadevo rešiti na še en način. In sicer takole, da najprej uporabniku odvzamemo dostop do datotek:

#deny all access
deny from all
IndexIgnore *

Super, sedaj ne more do datotek nišče. Razen server seveda, zato lahko datoteko serviramo preko recimo datoteke.php, v kateri je nekaj takega:

<?php

session_cache_limiter('none'); //Use before session_start()
session_start();
$allowedfilepath="files/";
$file =  stripslashes($_GET['file']);

if (isset($_GET['file']) && file_exists($allowedfilepath.$file)
&& is_readable($allowedfilepath.$file)){

//If you remove this line, you're in big trouble.
//(All files in your server will be accessible)
if (realpath($allowedfilepath)."/$file"==realpath($allowedfilepath.$file)){
_getfile($allowedfilepath, $file);
} else {
/* You can set it to HTTP/1.0 404 Not Found if
you don't want to show forbidden message. */
header("HTTP/1.0 403 Forbidden");
}
} else {
header("HTTP/1.0 404 Not Found");
header("Status: 404 Not Found");
}

function _getfile($_path, $_file){
//Make sure the file is not cached by the browser.
header ('Cache-Control: no-store, no-cache, must-revalidate');
header ('Cache-Control: pre-check=0, post-check=0, max-age=0');
header ('Pragma: no-cache');

header('Content-Description: File Transfer');
header('Content-Type: application/octet-stream');
header('Content-Length: ' . filesize($_path.$_file));
header('Content-Disposition: attachment; filename=' . basename($_file));
//Reads the file and writes it to output.
@readfile($_path.$_file);
}
?>

Ter nato uporabnikom dovolimo preko datoteke.php da si prenašajo datoteke po želji, ali pa omejitvah recimo v mysql, ozrimo kako pač …

Note: Ctype

Friday, September 28th, 2007
Nekaj, da se bom spomnil in si zapomnil Smile
 
ctype_alnum — Check for alphanumeric character(s)
ctype_alpha — Check for alphabetic character(s)
ctype_cntrl — Check for control character(s)
ctype_digit — Check for numeric character(s)
ctype_graph — Check for any printable character(s) except space
ctype_lower — Check for lowercase character(s)
ctype_print — Check for printable character(s)
ctype_punct — Check for any printable character which is not whitespace or an alphanumeric character
ctype_space — Check for whitespace character(s)
ctype_upper — Check for uppercase character(s)
ctype_xdigit — Check for character(s) representing a hexadecimal digit
 
http://si.php.net/ctype 

.htaccess in .htpasswd

Friday, September 28th, 2007

Torej, ker pravkar to delam na eni strani in ker imam čas preden se pomfri speče bom napisal še tole, kako preprosto zaščititi direktorj z geslom.

.htaccess
AuthName "Restricted Area"
AuthType Basic
AuthUserFile /home/mysite/.htpasswd
AuthGroupFile /dev/null
require valid-user

.htpasswd
HeXeR:lJjzynO1QqxJ.

V mojem, primeru je geslo test, če se bo kdo igral, pazite pa tudi da so datoteke v ASCII. Pa seveda ne pozabite spremeniti poti do .htpasswd.

Pohitrite nalaganje …

Sunday, September 23rd, 2007

Ker se pravkar ukvarjam z nekim projektom sem naletel na nekaj, kar bom spet delil z vami. In sicer, kako pohitriti spletno stran da se bo nalagala še hitreje ? Zraven cacheja in vseh ostalih fint je še ena zelo preprosta, ki vsekakor deluje.

Uporabljajte poddomene! Recimo, ko pride uporabnik na stran, mu iz www.hexnet.biz pošljete html kodo in favicon, iz nekaj.hexnet.biz mu pošljete slike in css, ter ostlao navlako ki spada tukaj zraven, … iz data.hexnet.biz pa kar ostane, v našem primeru, swf, mov in ostale datoteke.

Zakaj to deluje toliko hitreje ? Ker se ob zahtevku vse skupaj pretvori v IP naslov, torej pri vseh treh poddomenah je isti IP naslov, kar pomeni da ni potrebno delati novih DNS zahtevkov, ker gre vse na isti server.

Drug razlog za tako “neverjetno” hitrost pa izhaja iz brskalnika samega. In sicer, če bi vse imel na www.hexnet.biz in se vsakič naloži 30 datotek, bi to pomenilo da brskalnik čaka na 30 datotek iz enega hosta, če uporabim več poddomen kot sem navedel zgoraj pa je zadeva malo drugačna in sicer, brskalnik čaka na 30 elementov iz 3 virov, kar zelo pohitri zadevo.

Seveda, lahko preverite moj blog in hexnet.biz, nikjer ne boste našli omenjenega sistema, ker ni toliko obiskovalcev, da bi se mi ravno dalo/splačalo delati tole, glede na to da še pistat na blog včasih ne utegnem ali pa pozabim Grin, pa seveda zato ker vse skupaj poganja WordPress, na mojih sistemih (novejše izdelave) je že vseposod mod_rewrite in poddomene.

PHP – Ram ? Ali CPU

Sunday, September 23rd, 2007

Ne gre ravno za optimizacijo PHPja, ampak nekaj podobnega. Recimo da imate skripto ki prebere neko datoteko in jo izpiše. Če še določimo da je datoteka velika 200kb. Skripto lahko napišete vsej na dva načina, ki ju bom jaz omenil. Prva prebere celo datoteko 200kb ter jo izpiše, pri tem porabi malo več pomnilnika in malo manj procesorske moči. Druga verzija skripte ki dela isto, pa bi prebrala 1 vrstico, jo izpisala, nato prebrala naslednjo vrstico in jo izpisala.

In če sedaj primerjamo, kaj je bolje ? Porabiti več pomnilnika ali več procesorske moči ? Kolikor sem jaz gledal na strežnikih statistike in statistiko na mojem strežniku je poraba 1% ali manj, razen ob kakih večjih obremenitvah, ki niso stalne. Ampak vredu, moj strežnik niti nima dovolj velike povezave da bi lahko do konca izkoristil konfiguracijo. Zato pa poglej strežnik od Hostkota, ki je pri Amisu na 100 Mpbs+ povezavi. Konfiguracija je naslednja: 2 CPUja, obljubljajo Xeone in Opterone če se ne motim z 2 Gb ali več rama. Povprečna obremenitev obeh procesorjev je med 2% in 5%, medtem ko je pomnilnika porabljenega kar 30% (cache ni vštet). Na mojem domačem strežniku pa je stanje malo drugačno. Porabljenega je 97% pomnilnika.

In sicer če se bo kdo poglobil, pa poiskal malo po sysinfih, ki se jih v Googlu  najde cel kup, bo kaj kmalu ugotovil da je poraba rama vedno velika na strežnikih, medtem ko CPU skoraj nič ne dela (ni nujno da je vedno tako), takisto sem pred kratkim gledal neko obsežno besedilo o optimizaciji PHPja in je bilo lepo pred stavljeno kako strežnik “krepne” če je vaša koda spisana tako da porablja velike količine pomnilnika.

Komentarji na čudnem mestu ? Mogoče celo <![CDATA[ ?

Friday, September 14th, 2007

Recimo, koda ob ToboAds vsebuje nekaj takega …

<script type="text/javascript">
<!--

potem najdete tudi …
<style type="text/css">
<![CDATA[

Zakaj in čemu sploh to ? Odgovor je zelo preprost. Zato da brskalnik ne upošteva kakšnih čudnih znakov ki jih lahko uporabite v svojih skriptah in CSS datoteka, pa tudi pri preverjanju kode mislim da ven vrže nekaj napakic. Predvsem za znake &, <, >. Drugače pa sicer se ponekod uporabljajo komentarji a če že tako delate priporočajo CDATA (unparsed content data). Žal pa zadeva ni podprta v vseh brskalnikih, zato raje uporabit zunanjo datoteko. Ampak pri ToboAds bi to malo čudno izgledalo, kljub temu da je izvedljivo. Res pa je da na srečo ne uporabljajo nikakršnih znakov, ki bi bili problem, gre samo za definiranje spremenljivk. Pri meni se je namreč pojavim problem da se zadeva zakomentira ker izpišem celo stran v eni vrstici vsak JS pa je v zunanjih datotekah.

Custom statistic – načrtovanje mysql tabel

Saturday, September 8th, 2007

Recimo da uporabim nekaj takega:

_userinfo
id
brskalnik
operacijski sistem
resolucija
ip naslov
barvna globina
brskalnik podpira Flash
brskalnik podpira Javo
nov obiskovalec ali ne
datetime
referer (cel naslov)

_heatmap
id
x
y
datetime

_referes
id
datetime
cel naslov

_keywords
id
ključna beseda
iskalnik
datetime

_hits
id
id_referes
id_keywords
id_heatmap
id_userinfo
število strani ki jih je že pregledal v tej seji
cel trenutni naslov
koliko časa je bil uporabnik na strani
http status code

Hmm, sem kaj pozabil ? Dodam kaj …

Prevajanje programov

Saturday, September 8th, 2007

Programa v višje nivojskem jeziku računalnik ne razume, da ga lahko izvaja ga moremo spremeniti v izvajalno obliko. To opravi prevajalnik ali tolmač glede na obliko implementacije.

Prevajalnik je program ki prevede izvorno kodo programa v višje nivojskem jeziku v strojni jezik. Prevedeni program lahko nato izvajamo. Če prevajalnik v programu odkrije sintaktične napake, nas nanje opozori, izvajalna koda pa se ne kreira. Ko napake popravimo moremo ponoviti postopek prevajanja.

Tolmač (interpreter)  je program, ki je sposoben izvajati izvorno kodo. Tolmač deluj tako da po zagonu programa v izvorni kodi, vsak ukaz sproti prevede v ukaze strojnega jezika in ga potem pošlje procesorju, ki ta ukaz izvrši. Prednost tolmačev se pokaže predvsem pri razvijanju programov, ko rezultat zapisanih ukazov pogosto preverjamo. S tolmačem se izognemo zapisovanju prevedene kode na disk. Slabost pa je sprotno prevajanje zaradi česar je program počasnejši, pa tudi tolmač brez katerega programa nemoremo izvršiti.

Povezovalnik (linker) je orodje ki združi vse ločeno prevedene module programa v obliko ki je primerna za izvajanje. Ko program prevedemo, se ustvari vmesna oblik, v katero moremo povezati del knjižic, ki vsebujejo implementacijo standardnih rutin, uporabljenih v programu ter še ostale, uporabniško definirane module, če obstajajo.

Razhroščevanje je postopek identifikacije in odstranitve lokaliziranih implementacijskih napak iz programa ali iz sistema.

Razhroščevalnik je orodje ki omogoča notranje preverjanje kako se program obnaša, takšno orodje običajno nudi tudi sledilne sposobnosti. Ter še par funkcij ki nam olajšajo delo Smile.

Vrste programskih jezikov

Saturday, September 8th, 2007

1. generacija – strojni jezik
Je sestavljen iz ničel in enk. Strojno kodo računalnik izvaja najhitreje, sej jo procesor izvaja direktno. Vendar je strojni jezik zelo težek za učenje, iskanje napak in urejanje je oteženo zaradi velikega števila ukazov, programi so zelo nepregledni ter niso prenosljivi.

2. generacija – zbirnik
Operacijska koda ukaza je določena z  mnemoniki, zato je koda bolj berljiva in enostavnejša za pisanje, vendar more biti pred izvajanjem prevedena v strojni jezik. Zbirnik je odvisen od strojne opreme, programi niso prenosljivi. Programi so še vedno nepregledni.

3. generacija – višje nivojski jeziki
To so splošni jeziki, ne vsebujejo podrobnosti, po katerih se razlikujejo posamezni tipi računalnikov. Ljudem omogočajo enostavnejše programiranje, imajo majhen nabor ukazov, programi pa so prenosljivi v obliki izvorne kode.

4. generacija – 4GL
Jeziki so načrtovani za določen namen, njihov cilj je dvig produktivnosti in uporabniške prijaznosti, krajšanje razvojnih ciklov in nižanje stroškov. Obstajajo različni tipi: generatorji poročil, generatorji obrazcev, CASE orodja, 4GL za upravljanje s pdoatki.

5. generacija – 5GL
Temeljijo na reševanju problemov  z uporabo pogojev, ki jih podamo v programu in ne na algoritmu, ki bi ga zapisal programer.  Programer se ukvarja le s problemom ki mora biti rešen in pogoji ki morajo biti za to izpolnjeni z načinom reševanja pa se ne ukvarja.

Programski jeziki

Saturday, September 8th, 2007

Programski jezik je programerjevo osnovno orodje, ki predstavlja komunikacijo z računalnikom. Programski jeziki so v bistvu le navodila za izvajanje računskih postopkov, ki so enostavna za človeka, pa tudi za računalnik, čeprav se najhitreje izvaja strojna in ne programska koda.

Uradna definicija bi bila približno takšna: “Programski jezik je način zapisa računalniških programov ali natančno določenih opisov algoritmov. Programski jeziki so umetni jeziki, ki imajo natančno določeno sintakso in semantiko. Programski jezik ne dopušča svobode izražanja, ki je značilna za naravne jezike.”

Sintaksa programskega jezika so točno določena pravila ki določajo veljavno zaporedje znakov v programu. Določajo tudi obliko različnih konstruktov jezik, vendar ne povedo nič o njihovem pomenu.

Semantika je del definicije programskega jezik, ki se ukvarja z določitvijo pomena ali učinka besedila ki je zgrajeno po sintaktičnih pravilih nekega programskega jezika.

Programske jezike delimo po različnih kriterijih, in sicer glede na:
- namen uporabe (splošno namenske in domensko specifične)
- način opisa problema oziroma rešitve (postopkovne in nepostopkovne/napovedovalne)
- zapis programov (linearne in vizualne)
- način implementacije (interpretirane in prevedene)
- vzorec (proceduralne, objektne, objektno usmerjene, …Wink

Program v postopkovnem jeziku eksplicitno določa, kako priti do želenega rezultata, ne določa pa eksplicitno njegovih lastnosti. Rezultat je samo posredno določen kot rezultat sledenja določenemu postopku. Postopek je podan v obliki zaporedja operacij.

Program v deklarativnem jeziku eksplicitno določa lastnost, ki jih mora imeti željen rezultat, ne določa pa načina pridobivanja rezultata. Sprejemljiv je vsak način ki nas pripelje do želenega rezultata.

Proceduralni jeziki so postopkovni jeziki, ki omogočajo zapis programa z definiranjem nabora procedur. Procedure pa se lahko medsebojno kličejo ali pa jih kliče glavni program.

V objektnih jezikih je program realiziran z objekti in razredi. Objekti so računalniški modeli stvari in predmetov iz realnega sveta. Lastnosti objektov pa so zapisane v razredih. Razred zraven podatkov vsebuje še odzive in akcije ki jih objekt lahko izvede.

Glavne značilnosti objektnih jezikov:
- kapsuliranje, skrivanje podatkov znotraj objekta, omogoča programiranje neodvisno od implementacije razredov.
- delovanje omogoča izpeljavo novih razredov iz že obstoječih. Nov razred pa pri tem podeduje lastnosti svojega nadrazreda, tem pa doda še svoje posebnosti. Na ta način urejamo razrede v hierarhije razredov.
- polimorfizem, ista operacija je lahko implementirana na več različnih načinov in da se lahko objekti različnih razredov odzivajo na isto sporočilo različno.

Prednosti objektnega programiranja so:
- bolj naraven razvoj programov
- večja možnost spreminjanja programov
- lažje vzdrževanje programov
- ponovna uporaba programov

Slabosti:
- Pri načrtovanju in izdelavi programa zahteva od programerja veliko znanja in izkušenj.

Kateri Charset izbrati ?

Friday, August 24th, 2007

Pa poglejmo kaj porečejo drugi, recimo Izklop je v windows-1250 prav tako RN, 24ur in najdi.si v UTF-8, Slo-Tech pa v iso-8859-2. Zanimivo a sem pričakoval da bom prav pri Slo-Techu naletel na UTF-8.

Sicer morme priznati pred časom sem imel kar nekaj problemov z charseti, a sedaj sem to uredil. Prav tako sem večino svojih stvaritev prestavil v UTF-8, lepo da so to uvedli pri phpBB3, WP je tako okej, imam še par starih strani kjer je iso-8859-1, čeprav se ga izogibam. Sedaj pa vse delam v UTF-8, baze, datoteke, headerji, vse vse vse …

Zakaj ? Zato ker vse večje strani v UTF-8, recimo iskalniki ki so moj cilj, poglejte v kakem charsetu je Google in njihova baza. Zato je tudi najlažje za iskalnike da poindexirajo mojo vsebino. Mogoče Google niti ne ker je zelo dodelan, kakšni primitivnejši iskalniki pa bi lahko imeli probleme. Pa še ena stvar je, od vseh charsetov ki se več ali manj danes uporabljajo je UTF-8 najboljša izbira, prav tako podpira največ znakov.

Pa recimo naši preljubi šumniki. Če imam file kodiran v UTF-8 in ne ANSI, ter uporabljam za izpis UTF-8, potem lahko pišem vsepovsod šumnike, ne rabim kod in nevem česa še vse, pa recimo MySql, celo v imenu vrstice lahko imam šumnike, kar sicer ni priporočljivo ampak deluje.

Opomnil bi še za vse ki bodo mogoče imeli probleme. Večina editorjev ki tečejo na Windows sistemu ne znajo shraniti datoteke v UTF-8, temveč jo avtomatsko shranijo kot UTF-8 BOM, zaradi česa dobite errorje v kombinaciji s header();

Več o tem najdete tukaj: http://bugs.php.net/bug.php?id=22108

Skratka UTF-8, UTF-8 in še enkrat UTF-8.

Data2data ?

Thursday, August 23rd, 2007

Enkrat sem govoril kako enostavno z funkcijo potegnit podatek iz baze, kadar potrebujemo recimo samo en podatek. Mislim da je šlo za funkcijo id2data. Kaj pa če ne uporabljamo id ? Ampak recimo link_id, movie_id, … ali pa če nimam IDja če želimo podatek pa v “WHERE” ne id ampak kaj druga Smile.

Tole:

function data2data ($id1, $tabela, $id2, $podatek)
{
$podatki_mysql = mysql_query("SELECT `".$id1."`, `".$podatek."` FROM `".$tabela."` WHERE `".$id1."` = '".$id2."' LIMIT 1;");
while ($podatek_mysql = mysql_fetch_array($podatki_mysql)) { return $podatek_mysql[$podatek]; }
}

Zelo preprosto, ampak lepše je če kje kaj delam pa kar s bloga nahitro skopiram Grin.

Iščete kodo za nek znak ?

Monday, August 20th, 2007

Nekaj kar lahko poženete kar na svojem strežniku …

<?

$i = 1;
while ($i <= 1000) { echo $i . ‘ – &#’ .$i++ . ‘;<br />’; }

?>

Skoraj eno-vrstičnica Grin izpiše pa do 1000 znakov, po želji lahko spremenite na več, vendar zna malo trajati da se stran naloži.

PS: Sej bi lahko stlačil vse v eno vrstico, a mi je tako lepše Smile.

Spletišče …

Saturday, August 18th, 2007

Recimo da delate ZELO veliko spletno stran, ki je razdeljena po par poddomenah, seveda je tudi mod_rewrite uporabljen, skratka URLji so v nulo zrihtani. Potem lahko računate na PR6+ brez kupovanja linkov Smile

No problem nastane če imate stran na več poddomenah. Kako prijaviti uporabnika ? Oziroma ne, problem je kako prijaviti uporabnika v sistem samo enkrat pa je prijavljen na vseh poddomenah. Piškoti itak odpadejo ker ima uporabnik večje možnosti manevriranja, to sicer lahko preverjate a vendar. Torej seje, vendar tudi seje uporabljajo piškote, popravek piškot. Tukaj pa nastane problem. Uporabnik se prijavi na prijava.vasa-domena.com piškot za sejo se shrani na to domeno, zato ga potem nemorete prebrati na recimo novice.vasa-domena.com. Ena od možnoih rešitev je naslednja:

.htaccess
php_value session.cookie_domain vasa-domena.com
ali
.php
ini_set('session.cookie_domain', 'vasa-domena.com');

tako imate piškot za seje na domeni in tudi prebira tistega ki je na domeni. Dodati je še potrebno da vseposod to dvoje ne deluje, v takem primeru more to dodati administrator strežnika v konfiguracijo za Vaš host. V bistvu gre za zaščito, rešitev je da kontaktirate administratorja da Vam to doda in zadeva dela.

Output za brskalnik

Saturday, August 18th, 2007

Zanimiva zadeva na katero prej nisem bil pozoren, pri trenutnem projektu pa se malo bolj trudim pa more biti vse 100% “tipi-topi”, v glavnem, vsa HTML koda ki jo dobi brskalnik je v eni vrstici Smile. Zanimivo a ne ? Pa tudi neberljivo, ok sej lahko skopirate v Notepad pa dodate par \n pa imate kodo, vendar vseeno, zadeve je bistveno manj kot pa če bi imel kup presledkov, pa še marsikaterega začetnika bo odvrnilo od odkrivanja moje kode Smile. Sicer pa tako ni nevem-kakšna znanost Smile tako da če imate veselje, kar …

Imate id ? Potrebujete podatek ?

Friday, August 3rd, 2007

V bistvu je tako, ko delaš nek večji projekt, pa delaš iz idji kamlu prideš do tega da recimo za izpis novice dobiš 2 podatka pa 4 idje iz katerih moreš dobiti podatke. Koda bi bila ZELO nepregledna (moja je včasih bila) če bi delal za vsak id:

while ($podatki = mysql_fetch_array(mysql_query("SELECT * FROM `lala` WHERE `id` = '".$nekaj."';"))) { .. }

dosti lažje je če imaš funkcijo kot je:

function id2data ($tabela, $id, $podatek)
{
$podatki_mysql = mysql_query("SELECT `id`, `".$podatek."` FROM `".$tabela."` WHERE `id` = '".$id."';");
while ($podatek_mysql = mysql_fetch_array($podatki_mysql)) { return $podatek_mysql["$podatek"]; }
}

In potem kličeš samo tole:

id2data("lala", $nekaj, "vrstica");

nekateri imajo to kar v warperjih, jaz za zdaj še delam tako Smile.

MySql date 2 date

Friday, August 3rd, 2007

Uh, ker ko sem začel en projekt nisem preveč razmišljal imam vse datume v bazi kot “date”, seveda potem to lahko izpišem samo kot “leto-mesec-dan ura-mintua-sekunda” jaz pa hočem nek svoj zapis, načeloma bi lahko po celi bazi imel “timestamp”
vendar jaz že imam podatke, tako da tega sedaj nebi spreminjal. Je pa še en razlog da tega nebi spreminjal, ko kaj “drkam” po phpMyAdminu je datumi v takšni obliki da jih lahko hitro preverem.

V timestamp se še nisem prav poglabljal, tako da moja rešitev mogoče ni najboljša, oziroba deluje že, vendar bi se dalo kako drugače rešiti, da bi MySql datum pretvoril v “timestamp” pa potem iz, time stamp dobim željen format. To bi mi pomagalo samo če bi želel po poratlu različne oblike datuma, ker bi potem lažje spisal funkcijo. Ker pa bom mel povsod isto je uporabno že tole:

function mysqldate2nicedate ($input)
{
$fulldate = explode(" ", $input);
$ura = $fulldate["1"];
$datum = explode("-", $fulldate["0"]);
return $datum["2"].'.'.$datum["1"].'.'.$datum["0"].' '.$ura;
}

Tako se recimo tole: 2007-07-26 11:24:00 spremeni v tole: 27.07.2007 20:19:41.

MySql where null

Wednesday, August 1st, 2007

Zelo zanimiva zadeva, pravkar delam en album in more Administrator dodati slike v album, kaj pa tiste ki jih ne doda v album ? No tiste slike imajo

`album_id` = Null

Ampak problem nastane da morem Administratorju prikazati vse slike, da jih sploh lahko doda v album, torej tudi te ki imajo null. Zato sem poskusil takole:

SELECT * FROM my_table WHERE phone = null;

in

SELECT * FROM my_table WHERE phone = '';

pa ne dela seveda, potem pa google in slučajno najdem tole http://dev.mysql.com/doc/refman/5.0/en/problems-with-null.html prečekiram in vidim da je tudi možnost uporabiti is, ki ga sicer ne uporabljam ampak ok, mogoče bo delalo … torej dobimo tole:

SELECT * FROM my_table WHERE phone IS NULL;

in glej ga. DELA! Prva dva querya pa ne, čeprav bi po tem kar tam piše, moralo tudi tole delati:

SELECT * FROM my_table WHERE phone = '';

Drugače pa na serverju teče zadnji MySql 5ka, pa učitno še ima kar nekaj problemov . Ali po domače MySql Null Bug.