From: | "Rudolph, Michael" <Michael(dot)Rudolph(at)telekom(dot)de> |
---|---|
To: | "'Michael A(dot) Mayo'" <mmayo(at)mcauleybrooklyn(dot)org>, "'Alessio Bragadini'" <alessio(at)albourne(dot)com> |
Cc: | pgsql-sql(at)postgresql(dot)org |
Subject: | AW: What is the difference between NULL and "undef" |
Date: | 2000-05-17 06:11:22 |
Message-ID: | EB8366869DABD2119F3200A0C9F02CC8016544EA@U8P27 |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Thread: | |
Lists: | pgsql-sql |
Ok, I see now, what mistakes in thinking I made. Thanks to all who
informed me. But my original problem is not really solved, I just
made a workaround and I'm not sure, if there is a real solution:
I read in a date from an input-field of an formular. I now have to
check, if this input-variable is empty. If it is, I set it to NULL,
if not, I take it as input.
My program looks now in parts like this:
if ($var3 == 0){ $var3 = NULL } # Testing if empty
else {$var3 = "'$var3'";} # input-field is not empty
$rc = $dbh->do("INSERT INTO test1 (var1,var2,var3)
VALUES ('$var1','$var2',$var3)");
with var3 being my date-variable. I have to juggle with the quotes
to bring in the right value. If I wouldn't do the "'$var3'" in line 2,
there were a parser error of Postgres. If I set the variable $var3
in line 5 in quotes, NULL wouldn't be interpreted in the right way.
That solution works now, but it seems to me a bit fussy. And it is
a lot of testing and transforming, when there are a lot of date-
variables in the program.
Michael
>I believe you are confused about the meaning of "undef." In general,
>variables are classified as undefined in one of 2 ways:
>1) The variable is not declared, or is declared but no value is ever
>assigned to it
>2) The variable is assigned the return value of some function, and the
>function fails, returning undef.
>
>A valid value is not "undef." Things like empty string or the number 0 are
>valid values for a variable to have, and therefore are not "undef." Undef
>should be interpreted as "something is catastrophically wrong with this
>variable."
>
>CGI.pm returns an empty string for text form fields that are not filled out.
>Therefore, it is neccecary to test for the empty string and translate that
>to
>NULL or undef if you want an empty form field to work out to NULL.
>
>----------------------------------------------------------------------------
>On my system, the following mini-program inserts a NULL value:
>my $test_string; #note: no value assigned to test_string - it's undefined
>my $database = DBI->connect("dbi:Pg:dbname=test");
>
>$test_string = $database->quote($test_string);
>$database->do("
> INSERT INTO employees(name)
> VALUES($test_string)
>");
----------------------------------------------------------------------------
The following mini-program inserts an empty string:
my $test_string = ""; #empty string assigned to test_string
my $database = DBI->connect("dbi:Pg:dbname=test");
$test_string = $database->quote($test_string);
$sql_statement = $database->do("
INSERT INTO employees(name)
VALUES($test_string)
");
-Mike
From | Date | Subject | |
---|---|---|---|
Next Message | Alex Guryanow | 2000-05-17 07:51:49 | lower() for varchar data by creating an index |
Previous Message | Thomas Lockhart | 2000-05-17 05:38:58 | Re: Question about databases in alternate locations... |