MySQL INSERT Handbuch Zitiert - Gleiches gilt für UPDATE:Vorbereiten einer MySQL INSERT/UPDATE-Anweisung mit Standardwerten
Use the keyword DEFAULT to set a column explicitly to its default value. This makes it easier to write INSERT statements that assign values to all but a few columns, because it enables you to avoid writing an incomplete VALUES list that does not include a value for each column in the table. Otherwise, you would have to write out the list of column names corresponding to each value in the VALUES list.
Also kurz gesagt, wenn ich
INSERT INTO table1 (column1,column2) values ('value1',DEFAULT);
eine neue Zeile mit column2 schreiben gesetzt, wie sein Standardwert - was auch immer es sein mag - wird eingefügt.
Allerdings, wenn ich eine Aussage in PHP erstellen und auszuführen:
$statement = $pdoObject->
prepare("INSERT INTO table1 (column1,column2) values (?,?)");
$statement->execute(array('value1','DEFAULT'));
Die neue Zeile wird ‚Standard‘ als Textwert enthält - wenn die Spalte der Lage ist, Textwerte zu speichern.
Jetzt habe ich eine Abstraktionsschicht zu PDO geschrieben (ich es nicht erforderlich), um dieses Problem zu bekommen ich angesichts einer
const DEFAULT_VALUE = "randomstring";
einzuführen So konnte ich Aussagen wie folgt ausführen:
$statement->execute(array('value1',mysql::DEFAULT_VALUE));
Und dann in der Methode, die die Bindung tut, würde ich durch Werte gehen, die gesendet werden, um gebunden zu sein, und wenn einige gleich sind self::DEFAULT_VALUE
, entsprechend handeln.
Ich bin mir ziemlich sicher, es gibt einen besseren Weg, dies zu tun. Hat jemand anderes ähnliche Situationen erlebt?
Da PDO Ihre Werte Verarbeitung als Strings eingegeben werden, es sieht aus wie Sie müssen möglicherweise die ändern Code ein bisschen, wenn das möglich ist. Sie könnten es so ändern, dass Sie '... execute (array ('\' value1 \ '', 'DEFAULT'))' eingeben, aber ich nehme an, dass PDO diese Werte für Sie mit mysql_real_escape_string() verarbeitet. 'usw. Dies würde diese Funktion zunichte machen. Sie müssen es wahrscheinlich direkt in das 'prepare()' Argument einfügen. – Jonah
Warum sollten Sie nicht einfach Spalten in Ihre INSERT-Anweisung aufnehmen, die Sie auf einen anderen Wert als den Standardwert setzen? –
Das Problem ist mit "UPDATE" und eine leere Eingabe gesendet. Ich brauche es als Standard, nicht zum Beispiel '0000-00-00' für Datumsfelder, wenn '' ''als neuer Wert festgelegt wird. – raveren