it-swarm.com.de

MySQL, wie man Nulldaten einfügt

Ich habe Probleme beim Einfügen von Nullwerten in Datumsfelder in eine MySQL-Tabelle. 

Hier ist die Einfügeabfrage:

$query = 'INSERT INTO table (column_s1, column_s2, column_d1, column_d2)
VALUES ("'.$string1.'", "'.$string2.'", '.$date1.', '.$date2.')';

Die Spalten s1 und s2 nehmen String-Werte und d1 und d2 Datumsangaben an. Wenn ich diese Abfrage nur mit den String-Feldern ausführe, gibt es kein Problem.

Die Datumswerte können entweder gesetzt oder null sein, daher habe ich die Anführungszeichen nicht in die Abfrage eingefügt, sondern sie stattdessen der Variablen zuvor hinzugefügt. Dies ist der PHP-Code, den ich zum Einstellen der Datumswerte verwende:

if (empty($date1)){
    $date1 = NULL;
}
else{
    $date1part = explode("/",$date1);
    $date1 = '"'.$date1part[2].'/'.$date1part[1].'/'.$date1part[0].'"';
}

Wenn alle Datumswerte eingestellt sind, wird der Datensatz korrekt eingefügt. Wenn jedoch eines der Datumsangaben null ist, wird nichts eingefügt.

Warum kann ich nicht einfach so Nullwerte in MySQL einfügen?

10
apkdsmith

Sie sollten die Nullvariable zuerst in eine NULL-Zeichenfolge umwandeln.

if(is_null($date1)){
    $date1 = 'NULL';
}

Wenn Sie eine MySQL-Datumsspalte verwenden, müssen Sie außerdem angeben, dass die Spalte bei der Erstellung den Wert null haben soll.

CREATE TABLE `table` (
id INT NOT NULL AUTO_INCREMENT,
date DATE NULL DEFAULT NULL,
PRIMARY KEY(id)
)

Es ist auch sehr wichtig, dass Sie die Abfrage mit gebundenen Parametern ausführen, beispielsweise mit pdo

  1. http://www.php.net/manual/de/pdo.construct.php
  2. http://php.net/manual/de/pdo.prepared-statements.php
  3. Wie füge ich mit PDO NULL-Werte ein?

Etwas wie das:

$query = 'INSERT INTO table (column_s1, column_s2, column_d1, column_d2)
VALUES (?, ?, ?, ?)';
$stmt = $db->prepare($query);
$stmt->execute(array($string1,$string2,$date1,$date2));
6
Timo Huovinen

Versuche dies:

$query = "INSERT INTO table (column_s1, column_s2, column_d1, column_d2) 
          VALUES ('$string1', '$string2', " . ($date1==NULL ? "NULL" : "'$date1'") . ", " . ($date2==NULL ? "NULL" : "'$date2'") . ");";

also zum Beispiel, wenn Sie dies in Abfrage stellen:

$string1 = "s1";
$string2 = "s2";
$date1 = NULL;
$date2 = NULL;

ergebnis sollte sein:

INSERT INTO table (column_s1, column_s2, column_d1, column_d2) VALUES ('s1', 's2', NULL, NULL);
6
Wh1T3h4Ck5

Backslash N ist eine andere Möglichkeit, NULL in MySQL auszudrücken. 

Versuchen Sie, den Wert (Backslash N): \N in einen der folgenden Parameter einzufügen:

$data1 = "\N";
$sql="insert into tablename set column_s1='" . $data1 . 
  "', column_s2='" . data2 . 
  "', column_s3='" . $data3 . "'";

Referenz: http://dev.mysql.com/doc/refman/5.1/de/load-data.html

2

Wenn Sie in Derby Werte einfügen möchten, mit Ausnahme derjenigen, die Sie als Null deklariert haben (column_d1, column_d2), sql:

INSERT INTO DB.table (column_s1, column_s2) VALUES ('s1', 's2');
1

wenn NULL keine Arbeit nur Datum als "0000-00-00" übergeben

$chequeDate = "0000-00-00";
1
Optimaz ID

Wahrscheinlich ist die Antwort in diesem Moment nicht nötig, aber ich habe genau die Lösung gefunden, die ich gesucht habe. Verwenden Sie eine Expression, um NULL wie folgt zu übergeben: 

['some_date_to_update' => new Expression('NULL')]

Daher versteht MySQL, was Sie möchten, und speichert (NULL) in der DB, anstatt 0-Datumsangaben zu speichern. Hoffe, das hilft jemandem.

1
Grokking

In Mysql DATE Datentyp Default NULL bedeutet 

Einige Version ist als 0000-00-00 eingestellt.

Einige Version ist als 1970-01-01 eingestellt.

0
Siva