Eine leere Zeichenfolge in nicht-null-Spalte in MySQL?

Nutzte ich die standard mysql_connect(), mysql_query(), etc-Anweisungen für MySQL zu tun Sachen von PHP. In letzter Zeit habe ich schon die Umstellung auf die Verwendung der wunderbaren MDB2 Klasse. Zusammen mit ihm, ich bin mit prepared statements, so dass ich nicht sorgen über meine Flucht Eingangs-und SQL-injection-Angriffe.

Allerdings, ein problem gibt es ich in. Ich habe eine Tabelle mit ein paar VARCHAR-Spalten angegeben werden, die als nicht-null (nicht NULL-Werte zulassen). Mit der alten MySQL PHP Befehle, ich konnte Dinge tun, wie Sie dies ohne problem:

INSERT INTO mytable SET somevarchar = '';

Nun aber, wenn ich eine Abfrage wie:

INSERT INTO mytable SET somevarchar = ?;

Und dann in PHP habe ich:

$value = "";
$prepared = $db->prepare($query, array('text'));
$result = $prepared->execute($value);

Diese werfen den Fehler "null value violates not-null constraint"

Als vorübergehende Lösung, ich überprüfen, ob $value ist leer, und ändern Sie es zu " " (ein einzelnes Leerzeichen), aber das ist eine schreckliche hack und verursachen andere Probleme.

Wie soll ich denn das einfügen von leeren Saiten mit prepared statements, ohne es zu versuchen, statt, legen Sie eine NULL?

EDIT: Es ist zu groß, ein Projekt zu gehen, durch meine gesamte Codebasis, finden überall verwendet einen leeren string "" und ändern Sie ihn auf NULL statt. Was ich wissen muss ist, warum die standard-MySQL-Abfragen zu behandeln, "" und NULL als zwei getrennte Dinge (wie ich denke ist richtig), aber prepared statements konvertiert "" in NULL.

Beachten Sie, dass "" und NULL sind nicht die gleiche Sache. Zum Beispiel SELECT NULL = ""; zurück NULL statt 1 wie man es erwarten würde.

Wenn Sie einfügen " ", das ist im Grunde null, warum nicht ändern, das Feld in der db auf null zulassen.
es ist "im Grunde "null" in der gleichen Weise, dass 0 ist "grundsätzlich" falsch. Sie sind ähnlich, aber eigentlich ganz anders.
NULL bedeutet "kein Wert" nicht "leere Zeichenfolge"
Das ist wahr, aber das speichern einer "leeren", dass es keine Daten enthält, wird der Wert, Im fast positiv ist kostet mehr als das speichern einer NULL
Sie sind richtig, dass die NULL ist nicht das gleiche wie "", aber man sollte Sie nicht tun, einen Vergleich wie SELECT NULL = ""; diese wird immer null zurückgegeben, unabhängig davon, welchen Wert Sie im Vergleich zu null

InformationsquelleAutor davr | 2008-11-05

Schreibe einen Kommentar