Avatar billede moddi100 Seniormester
16. marts 2013 - 18:02 Der er 3 kommentarer og
1 løsning

Eksport fra database - felter med NULL

Hej,

Jeg sidder og er ved at implementere noget automatisk backup via php. Det fungerer fint med at der automatisk dannes en liste over databaser og deres tabeller. Jeg kan sagtens hente data ud og gemme det i en fil som planlagt, men dog kan jeg ikke undgå at ændre i dataene når jeg gemmer dem.

Problemet er, at jeg ikke ved om tomme felter skal opfattes som NULL-værdier eller som en tom tekst ''.

Det hele kan illustreres på billedet herunder, hvor første kolonne under hver type er sat til "default NULL":
http://s2.postimage.org/b83zizcd5/null_problematikken.png

Hvor tabellen er oprettet med:
CREATE TABLE `test` (
`int` int(11) default NULL,
`int2` int(11) NOT NULL,
`varchar` varchar(5) default NULL,
`varchar2` varchar(5) NOT NULL,
`datetime` datetime default NULL,
`datetime2` datetime NOT NULL
) ENGINE=MyISAM DEFAULT CHARSET=latin1;

INSERT INTO test VALUES (NULL, NULL, NULL, NULL, NULL, NULL), (0,0,0,0,0,0), ('','','','','','')


Som det ses er der forskel på hvad man anvender. Koden jeg bruger er en smule forsimplet:
$line = "INSERT INTO `{$table}` (";
foreach($row as $name => $val)
    $line .= "`{$name}`,";

$line = substr($line,0,-1) . ') VALUES (";
foreach($row as $val)
    $line .= "'{$val}',";

echo substr($line, 0, - 1) . ')';


1) Min umiddelbare tanke er, at jeg ved hjælp af querien til at oprette databasen kan se hvilke kolonner, der som standard er NULL, men det giver mig så ikke noget svar på om f.eks. et felt af typen VARCHAR skal være NULL eller ej.

2) Jeg er dog også kommet frem til, at for kolonner som ikke understøtter NULL, gør det ikke nogen forskel om man anvender det alligevel. Så måske man blot bør konvertere alle tomme værdier til NULL?

Mit spørgsål er altså, om det er nogen fornuftig måde at tjekke om et givent felt skal have en tom tekstværdi eller en NULL-værdi, når man eksportere fra en vilkårlig database til en anden? Kan man følge fremgangsmåde bag 2) eller bør man vælge 1) ?
Avatar billede arne_v Ekspert
16. marts 2013 - 19:56 #1
Kan du ikke bruge is_null til at teste med om $val er NULL?
Avatar billede erikjacobsen Ekspert
16. marts 2013 - 21:46 #2
NULL og den tomme streng i et felt i en tabel er ikke det samme. Det er muligt at dine php-filer ikke gør forskel på dem, men som backup af en tabel bør de vel kende forskel. Der er en lidt længere omtale og problem og løsning her: http://stackoverflow.com/questions/1576243/php-check-for-null
Avatar billede moddi100 Seniormester
17. marts 2013 - 00:05 #3
Det er nogle gange de simple svar, er de sværeste at finde :) Jeg takker for hjælpen begge to. Ligger du svar arne?
Avatar billede arne_v Ekspert
17. marts 2013 - 00:41 #4
svar
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester