MySQL NULL-Werte schreiben

MySQL NULL-Werte schreiben

am 01.02.2007 20:59:10 von Dominik Schindler

Hallo,

ich habe folgendes Problem:

mysql_query ("INSERT ... VALUES ( id, ... , optional, ... ) VALUES (
NULL, ..., '$optional', ...);");

Ist es im Beispiel oben möglich, ins Feld "optional" (VARCHAR) ein NULL
zu schreiben? Wenn nämlich "$optional" den Wert NULL hat bzw. nicht
definiert ist, wird einfach ein leerer String geschrieben.

Gruß,
-w

Re: MySQL NULL-Werte schreiben

am 02.02.2007 15:36:31 von Helmut Chang

Dominik Schindler schrieb:

> mysql_query ("INSERT ... VALUES ( id, ... , optional, ... ) VALUES (
> NULL, ..., '$optional', ...);");
>
> Ist es im Beispiel oben möglich, ins Feld "optional" (VARCHAR) ein NULL
> zu schreiben?

Nein. So nicht.

> Wenn nämlich "$optional" den Wert NULL hat bzw. nicht
> definiert ist, wird einfach ein leerer String geschrieben.

Ja klar. Weil diese "Werte" dann in einem String zu einem Leerstring
evaluieren.

Du müsstest anhand des Werts von $optional unterschiedliche Queries
absetzen:

if (!isset($optional) || is_null($optional)) {
...INSERT (.., optional) VALUES (.., NULL)
} else {
// Dein originaler Query
}

gruss, heli

Re: MySQL NULL-Werte schreiben

am 02.02.2007 18:05:10 von Dominik Schindler

Helmut Chang schrieb:

>> Wenn nämlich "$optional" den Wert NULL hat bzw. nicht
>> definiert ist, wird einfach ein leerer String geschrieben.
>
> Ja klar. Weil diese "Werte" dann in einem String zu einem Leerstring
> evaluieren.
>
> Du müsstest anhand des Werts von $optional unterschiedliche Queries
> absetzen:
>
> if (!isset($optional) || is_null($optional)) {
> ...INSERT (.., optional) VALUES (.., NULL)
> } else {
> // Dein originaler Query
> }

Schade. Diese Lösung wollte ich eigentlich umgehen. Ich dachte, evtl.
gibt da eine einfachere Lösung, aber mir bleibt anscheinend doch nix
anderes übrig als 2 unterschiedliche Queries abzusetzen.

> gruss, heli

Trotzdem Danke.

-w

Re: MySQL NULL-Werte schreiben

am 02.02.2007 18:24:38 von Heiko Richler

Dominik Schindler wrote:
> Schade. Diese Lösung wollte ich eigentlich umgehen. Ich dachte, evtl.
> gibt da eine einfachere Lösung, aber mir bleibt anscheinend doch nix
> anderes übrig als 2 unterschiedliche Queries abzusetzen.

Hast Du Prepared Statements versucht? (vgl. odbc_prepare:
http://de2.php.net/manual/en/function.odbc-prepare.php)

Oder Du benutzt eine Funktion:

function string2sql($value = null) {
if (!is_null($value ))
return 'null';
return "'". sqlencode($value). "'"
}

$sql = "INSERT ... VALUES ( id, ... , optional, ... ) VALUES ".
"(NULL, ..., '" string2sql($optional).
"',...);");

Für sqlencode wäre noch die richtige Funktion einzutragen.

Heiko
--
http://portal.richler.de/ Namensportal zu Richler
http://www.richler.de/ Heiko Richler: Computer - Know How!
http://www.richler.info/ private Homepage

Re: MySQL NULL-Werte schreiben

am 02.02.2007 21:30:46 von Dominik Schindler

Heiko Richler schrieb:
> Dominik Schindler wrote:
>> Schade. Diese Lösung wollte ich eigentlich umgehen. Ich dachte, evtl.
>> gibt da eine einfachere Lösung, aber mir bleibt anscheinend doch nix
>> anderes übrig als 2 unterschiedliche Queries abzusetzen.
>
> Hast Du Prepared Statements versucht? (vgl. odbc_prepare:
> http://de2.php.net/manual/en/function.odbc-prepare.php)
>

Nein habe ich noch nicht. Habe es aber jetzt so gelöst, wie ich anfangs
dachte, also mit 2 Queries (siehe auch vorherigen Post).

Trotzdem Danke.

-w