Here's the deal about null,
when you define a table
create table a(
field1 char(10) NULL,
field2 char(10) NULL,
field3 char(10) NULL)
and say insert into a set field1=1, field2=2, the value of field3 will be NULL which means "I was never told what the value is".
later you can go back and do this:
update a set field3="" where field1=1 and field2=2
Now you've got BLANK which is different than null, see what I mean?
Null is great for field where you want it to mean "unanswered" or "this doesn't apply". Suppose the field was "favorite food", blank means "I don't have a favorite food", but null would mean "we never found out because we haven't asked him".
Generally, setting fields in db's as NOT NULL makes the tables run faster, but many people don't understand null should be used in this context. Also when you get a count(field3), the nulls ( I could be mistaken) will not be counted among the records -- which is very powerful so that null fields don't alter statistical results. So in the case I mentioned, if you wanted to find out the number of instances where favoriteFood=spagetti, then divide by the count of the field favoriteFood, having nulls skipped keeps your percentages accurate among those with meaningful values.
Regarding == null in your php code, see is_null() on the php.net site and use that instead. is_null() only returns true for null, not zero, not blank, not unset.
HTH,
Sam