The Select-Statement is being interpreted by the server and so it is recognized, that there is the need of converting data from char to int. And an empty char as you provide will be converted into 0 because of default value for int.
So if you want to get all rows with no value (NULL) you have to do
SELECT * from delivery_receipts WHERE siid IS NULL;
EDIT
SELECT * from delivery_receipts WHERE ( siid = '$siid' and '$siid' <> '' ) OR ( '$siid' = '' AND siid IS NULL );