How to find out if option exists but is empty?

I am using something like this on one of my plugins:

$myOption_def = "myOption Default Value";
$myOption = get_option( 'myOption' ) ? get_option( 'myOption' ) : $myOption_def;

That works fine, but the problem is that I need to be able to set the option to “empty”, but when I do that (from a textarea on my plugin’s option page), I get the default value instead of an empty string because get_option( ‘myOption’ ) returns the same if my option value is empty than if it doesn’t exists.

So how can I figure out when my option doesn’t exist (and then set $myOption to my default value), or when my option value is empty (and then set $myOption to an empty string)?

Solutions Collecting From Web of "How to find out if option exists but is empty?"

Basically to distinguish between false boolean value and '' empty string you must use more strict comparison operator.

var_dump( '' == false ); // this is 'true', treated like two 'empty()' values

var_dump( '' === false ); // this is 'false', because values are both 'empty()' BUT of different type

But there is more. Since what you want is very typical – get_option() already can provide default value on its own. So your code can be simplified to:

$myOption = get_option( 'myOption', $myOption_def );

Note that this will correctly determine empty string and won’t apply default value in that case.

function optionExists($option_name) {
    global $wpdb;
    $row = $wpdb->get_row($wpdb->prepare("SELECT option_value FROM $wpdb->options WHERE option_name = %s LIMIT 1", $option_name));
    if (is_object($row)) {
        return true;
    }
    return false;
}

Oops, figure out myself:

$myOption = (get_option( 'myOption' )==FALSE) ? get_option( 'myOption' ) : $myOption_def; 

You could check for null like so,

$id = "my_option";

$option_exists = (get_option($id, null) !== null);

if ($option_exists) {
    update_option($id, $value);
} else {
    add_option($id, $value);
}