Met behulp van de volgende query lees in een txt bestand in in mijn tabel.

<?php
if ($lastupdate_value['maxtimestamp'] < $timeout) {
$file = file("downld02.txt");
$data = array_slice ($file, 3, count ($file) - 3);
for ($i = 0; $i < count ($file) - 3; $i++) {
$row = preg_split ("/ +/", trim ($data[$i]));
$dateArray = explode("-", "$row[0]");
$newdate = date('Y-m-d', mktime(0, 0, 0, $dateArray[1], $dateArray[0], $dateArray[2]));
for ($r=2;$r<=4;$r++){
if($row[$r] == '---'){
$row[$r] = NULL;
$data_insert = "INSERT INTO weerdata VALUES ('$newdate', '$row[1]', '$row[2]', '$row[3]', '$row[4]', '$row[5]', '$row[6]', '$row[7]', '$row[8]', '$row[9]', '$row[10]', '$row[11]', '$row[12]', '$row[13]', '$row[14]', '$row[15]', '$row[16]', '$row[17]', '$row[18]', '$row[19]', '$row[20]', '$row[21]', '$row[22]', '$row[23]', '$row[24]', '$row[25]', '$row[26]', '$row[27]', '$row[28]', '$row[29]', '$row[30]', '$row[31]', '$row[32]', '$row[33]', '$row[34]', '$row[35]', '$row[36]', '$timestamp')";
$result = mysql_query($data_insert);
}else{
$data_insert = "INSERT INTO weerdata VALUES ('$newdate', '$row[1]', '$row[2]', '$row[3]', '$row[4]', '$row[5]', '$row[6]', '$row[7]', '$row[8]', '$row[9]', '$row[10]', '$row[11]', '$row[12]', '$row[13]', '$row[14]', '$row[15]', '$row[16]', '$row[17]', '$row[18]', '$row[19]', '$row[20]', '$row[21]', '$row[22]', '$row[23]', '$row[24]', '$row[25]', '$row[26]', '$row[27]', '$row[28]', '$row[29]', '$row[30]', '$row[31]', '$row[32]', '$row[33]', '$row[34]', '$row[35]', '$row[36]', '$timestamp')";
$result = mysql_query($data_insert);
$forecast = "INSERT INTO forecast VALUES ('$date', '$realtime', '$ForecastStr', '$timestamp')";
$result_forecast = mysql_query($forecast);
}
}
}
}
?>

Op een enkele regel in het txt bestand ontbreekt er een waarde en staat er '---'. Om te voorkomen dat ik in mijn tabel de waarde 0.0 krijg controleer ik of er de waarde '---', voorkomt en zo ja, dan moet deze worden vervangen door NULL. In mijn tabel staan de betreffende kolommen ingesteld op NULL met default NULL. Toch wordt er bij het uitvoeren van de query 0.0 toegevoegd in mijn tabel. Wat gaat niet goed?
Het lijkt erop dat de query fout is, maar dat MySQL de fout niet afkeurd. Jij probeert namelijk

INSERT INTO
  tabel
VALUES (
 'NULL'
)

Op te slaan waarbij de kolom een nummeriek datatype bevat. Dit hoort te worden afgekeurd, de tekst 'NULL' mag nooit in een INT o.i.d. worden opgeslagen. Ik heb het over tekst omdat je de boel tussen quotes hebt gezet, precies zoals je een string hoort te behandelen.

Verder is de query niet netjes omdat je de kolomnamen niet noemt. Vroeg of laat ga je daarmee ook de mist in, de eerste beste onderhoudsbeurt gaat dit goed fout.

Tip: Ga dynamische queries bouwen, dan kun je bovenstaand probleem eenvoudig oplossen.
Bedoel je zoiets?
<?php
require 'php/db_connect.php';

$waarde = '---';
if ($waarde == '---'){
$waarde = 'NULL';
$data_insert = "INSERT INTO test (Getal) VALUES ($waarde)";
$result = mysql_query($data_insert) or die("wil niet" . mysql_error());
}else{
$data_insert = "INSERT INTO test (Getal) VALUES ($waarde)";
$result = mysql_query($data_insert) or die("wil niet" . mysql_error());
}

$query = mysql_query("SELECT AVG(Getal) AS gemiddelde FROM test");
$result = mysql_fetch_assoc($query);
echo $result['gemiddelde'];
?>

Het werkt nu wel om in een op Decimal ingetselde kolom een NULL te inserten. Ik ga nu kijken of dat met mijn echte tabel ook lukt...
Tip: Echo de queries ook even, dan zul je ook zien hoe deze nu daadwerkelijk naar de database wordt gestuurd. Het wordt dan wellicht ook beter duidelijk waaróm het nu wel goed gaat met de NULL.

Reageren