Je ne parviens pas à insérer des valeurs NULL dans des champs de date dans une table MySQL.
Voici la requête d'insertion:
$query = 'INSERT INTO table (column_s1, column_s2, column_d1, column_d2)
VALUES ("'.$string1.'", "'.$string2.'", '.$date1.', '.$date2.')';
Les colonnes s1 et s2 prennent des valeurs de chaîne et d1 et d2 prennent des dates. Lorsque je lance cette requête avec uniquement les champs de chaîne, il n'y a pas de problème.
Les valeurs de date peuvent être définies ou nulles. Je n'ai donc pas inclus les guillemets dans la requête, mais les ai ajoutés à la variable auparavant. C'est le code php que j'utilise pour définir les valeurs de date:
if (empty($date1)){
$date1 = NULL;
}
else{
$date1part = explode("/",$date1);
$date1 = '"'.$date1part[2].'/'.$date1part[1].'/'.$date1part[0].'"';
}
Lorsque toutes les valeurs de date sont définies, l’enregistrement est inséré correctement. Toutefois, lorsque l'une des dates est nulle, rien n'est inséré.
Pourquoi ne puis-je pas simplement insérer des valeurs NULL dans MySQL comme ceci?
Vous devez d'abord convertir la variable null en chaîne NULLComme ceci:
if(is_null($date1)){
$date1 = 'NULL';
}
Si vous utilisez une colonne de date MySQL, vous devez également spécifier qu'elle doit contenir la valeur null lors de sa création, comme ceci:
CREATE TABLE `table` (
id INT NOT NULL AUTO_INCREMENT,
date DATE NULL DEFAULT NULL,
PRIMARY KEY(id)
)
Il est également très important que vous exécutiez la requête avec des paramètres liés, par exemple en utilisant pdo.
Quelque chose comme ça:
$query = 'INSERT INTO table (column_s1, column_s2, column_d1, column_d2)
VALUES (?, ?, ?, ?)';
$stmt = $db->prepare($query);
$stmt->execute(array($string1,$string2,$date1,$date2));
Essaye ça:
$query = "INSERT INTO table (column_s1, column_s2, column_d1, column_d2)
VALUES ('$string1', '$string2', " . ($date1==NULL ? "NULL" : "'$date1'") . ", " . ($date2==NULL ? "NULL" : "'$date2'") . ");";
ainsi, par exemple, si vous mettez ceci dans une requête:
$string1 = "s1";
$string2 = "s2";
$date1 = NULL;
$date2 = NULL;
le résultat devrait être:
INSERT INTO table (column_s1, column_s2, column_d1, column_d2) VALUES ('s1', 's2', NULL, NULL);
La barre oblique inverse N est un autre moyen d’exprimer NULL dans MySQL.
Essayez de mettre la valeur (barre oblique inverse N): \N
dans l’un des paramètres suivants:
$data1 = "\N";
$sql="insert into tablename set column_s1='" . $data1 .
"', column_s2='" . data2 .
"', column_s3='" . $data3 . "'";
Référence: http://dev.mysql.com/doc/refman/5.1/fr/load-data.html
Dans Derby, si vous souhaitez insérer des valeurs autres que celles que vous avez déclarées Null (column_d1, column_d2), sql:
INSERT INTO DB.table (column_s1, column_s2) VALUES ('s1', 's2');
si NULL pas de travail, passez simplement la date comme "0000-00-00"
$chequeDate = "0000-00-00";
La réponse est probablement inutile en ce moment, mais j'ai trouvé la solution que j'ai recherchée. Utilisez un Expression
pour passer NULL
comme ceci:
['some_date_to_update' => new Expression('NULL')]
Par conséquent, MySQL comprendra ce que vous voulez et enregistrera (NULL)
dans la base de données au lieu de stocker les dates 0. J'espère que cela aidera quelqu'un.
Dans le type de données Mysql DATE
Par défaut NULL
signifie
Certaines versions sont définies comme 0000-00-00
Certaines versions sont définies comme 1970-01-01