MySQL NULL-Werte schreiben

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
Dominik Schindler [ Do, 01 Februar 2007 20:59 ] [ ID #1615775 ]

Re: MySQL NULL-Werte schreiben

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
Helmut Chang [ Fr, 02 Februar 2007 15:36 ] [ ID #1616909 ]

Re: MySQL NULL-Werte schreiben

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
Dominik Schindler [ Fr, 02 Februar 2007 18:05 ] [ ID #1616913 ]

Re: MySQL NULL-Werte schreiben

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
Heiko Richler [ Fr, 02 Februar 2007 18:24 ] [ ID #1616914 ]

Re: MySQL NULL-Werte schreiben

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
Dominik Schindler [ Fr, 02 Februar 2007 21:30 ] [ ID #1616915 ]
PHP » de.comp.lang.php.datenbanken » MySQL NULL-Werte schreiben

Vorheriges Thema: GroßeSQL-Datei in MySQL importieren?
Nächstes Thema: doppelte Bearbeiung von Datensätzen vermeiden?