SQL INSERT INTO, wenn Variable fehlt?

Überkinger

Lieutenant
Registriert
Juli 2010
Beiträge
600
$a = 1;
$c = 1;

$sql = "INSERT INTO text (a, b, c) VALUES (
' " . mysql_real_escape_string($a) . "',
' " . mysql_real_escape_string($b) . "',
' " . mysql_real_escape_string($c) . "'
)

Wird INSERT INTO ausgeführt, wenn $b nicht vorhanden ist? Wird das Feld b dann einfach leer gelassen?
 
Ausprobieren? Je nachdem wie PHP eingestellt ist, gibts eine Warnung, wenn du eine ungesetzte Variable benutzt - aber es kann auch einfach ohne Hinweis ausgeführt werden. Aber, durchlaufen wird es so oder so, in dem fall einfach mit einem leeren string.
 
Ich rechne mit einem "error_notice()", da die Variable "b" nicht gesetzt ist. Aber warum kann es passieren, dass "b" nicht gesetzt ist? Wenn das Daten aus einem Formular sind, und Du die Felder name, nachname, titel hast, werden bei post oder get auch alle Felder übergeben. Ob da nun was drin steht oder nicht.

Was Du machen könntest, wäre alle Felder ansprechen, und die Felder die leer sind mit NULL füllen lassen. Nächste Alternative wäre ungefähr so etwas...
PHP:
$in = array();
$in['a'] = ""
$in['b'] = ""
$in['c'] = ""
foreach($in as $key => $val) {
 if($key != '') {
  $out[$key] = $val
 }
}
$sql = sprintf(
 "INSERT INTO xxx ( %s ) VALUES ( %s )",
 implode(", ", array_keys($out)),
 implode(", ", $out));
So ungefähr, hab das eben mal aus dem Kopf zusammen gesponnen. Dann müsste er (wenn ich mich nicht irre) den kompletten Wert weg lassen, wenn er nicht gesetzt ist, und SQL meckert nicht sofort.
 
Überkinger schrieb:
$a = 1;
$c = 1;

$sql = "INSERT INTO text (a, b, c) VALUES (
' " . mysql_real_escape_string($a) . "',
' " . mysql_real_escape_string($b) . "',
' " . mysql_real_escape_string($c) . "'
)

Wird INSERT INTO ausgeführt, wenn $b nicht vorhanden ist? Wird das Feld b dann einfach leer gelassen?

ein beispiel:
a= 1
b= <null>
c= 2

INSERT INTO text (a, b, c) VALUES (' 1',' ',' 2')

in deinem feld steht somit ein leerzeichen.
wenn dein leerzeichen da unbeabsichtigt war, dann steht da '' drin, was NULL sein müsste.
b sollte dann auch nullable sein
 
Ich würde auch sagen ausporbieren da ich mir nun selber geradenicht sicher bin.
Aber NULL dürfte die DB nicht verstehen da es ein Zustand in PHP ist der einfach sagt das die Variable initialisiert ist aber keinen Inhalt hat, auch nicht '' (leer)

könnte mir vorstellen das es dann leer ist, aber grundsätzlich soltlen Variablen die deklaiert sind nicht uninitialisiert bleiben. Java würde das z.b. schon beim Kompelieren als Warnung anzeigen, wenn du sie benutzt ohne die deklariert oder intilaisiert zu haben sorgst nur dafür das du später lange nach nem Fehler suchen musst.

Ich rate dir einfach am anfang eines Scripts alle Variablen zu deklarieren und so bald wie möglich zu befüllen und wenn $b = NULL leer ist das script beenden, bzw. es explizit auf "" setzen, so kannst sicher sein das es dann auch auf anderen Konfigurationen läuft.

mir fällt aber auch kein beispiel ein wo man so etwas haben wollen würde....

edit:

das null der Datenbank ist ungleich dem NULL von PHP!

mysql_query("insert into bla set a = 'a' and b = " . null )

man müsste schon b = null im string schreiben, aber ohne anführungszeichen
das gibt einen fehler!

um null
 
Zuletzt bearbeitet:
Ob NULL oder nicht war doch eigentlich gar nicht die Frage. Ausserdem ist unset nochmals was anderes als null.
 
Zurück
Oben