MySQL Update

milkboy

Aktives Mitglied
Hallo

Ich führe in einem Scripz folgendes query aus:

CODE UPDATE ws_wetterarchiv_h SET h_temp = 3.7 , h_hum = 90.3 , h_press = 1017.7 , h_wind = x , h_main_dir = x , h_gust = x , h_gust_dir = x , h_rain_rate = 0.0 , h_rain_total = 0.20 , h_uvi = 0.5 , h_sol = 94.4 WHERE h_date = 20130321090000


und bekomme eine Fehlermeldung


CODE Unknown column 'x' in 'field list'


Ich verstehe diese Fehlermeldung bzw. die Ursache nicht, da ich ja nicht " x = Wert" sonder "Feld = x" Updaten will.

Kann mir jemand helfen?
 
Ist x eine Variable im Script?
Um welche Skriptsprache handelt es sich?

Oder soll der Buchstabe x im Feld gespeichert werden? Dann fehlen die Anführungszeichen.
 
Hallo

Ich verwende PHP.

Ich generiere mit meiner Wetterstation Datenfiles. Wenn irgend ein Sensor keine Daten liefern kann, wird ein "x" ins Datenfile geschrieben.

Das PHP Script liest die Datei aus und schreibt die Werte in die Datenbank.

CODE $quelle_hdaten = opendir($data_dir['h-daten']);

while($hdaten_hdatei = readdir($quelle_hdaten))
{
if ($hdaten_hdatei != "." && $hdaten_hdatei != "..")
{
$daten = file($data_dir['h-daten'].$hdaten_hdatei); // öffnet und liest Datei. linenweise

// Zuordnung der Zeilen aus Dateinfile
$h_daten['datum'] = $daten['3']; // gibt Datum aus Datendatei zurück
$h_daten['stunde'] = date('YmdH0000', strtotime($daten['3'])); // gibt stunde aus Datendatei zurück
$h_daten['temp'] = $daten['6']; // Temperatur, Durchschnitt aktuelle Stunde
$h_daten['hum'] = $daten['9']; // Relative Luftfeuchtigkeit, Durchschnitt aktuelle Stunde
$h_daten['press'] = $daten['12']; // Temperatur, Durchschnitt aktuelle Stunde
$h_daten['wind'] = $daten['15']; // Wind, Durchschnitt aktuelle Stunde
$h_daten['main_dir'] = $daten['16']; // Dominante Windrichtung, aktuelle Stunde
$h_daten['gust'] = $daten['17']; // Max Böe, aktuelle Stunde
$h_daten['gust_dir'] = $daten['18']; // Max. Böe Richtung, Durchschnitt aktuelle Stunde
$h_daten['rain_rate'] = $daten['21']; // Regenrate, Durchschnitt aktuelle Stunde
$h_daten['rain_total'] = $daten['22']; // Regenmenge, Total aktuelle Stunde
$h_daten['uvi'] = $daten['25']; // UV Index, Durchschnitt aktuelle Stunde
$h_daten['sol'] = $daten['28']; // Strahlung, Durchschnitt aktuelle Stunde

$sql = "UPDATE ".$mysql_tab_h." SET h_temp = ".$h_daten['temp'].", h_hum = ".$h_daten['hum'].", h_press = ".$h_daten['press'].", h_wind = ".$h_daten['wind'].", h_main_dir = ".$h_daten['main_dir'].", h_gust = ".$h_daten['gust'].", h_gust_dir = ".$h_daten['gust_dir'].", h_rain_rate = ".$h_daten['rain_rate'].", h_rain_total = ".$h_daten['rain_total'].", h_uvi = ".$h_daten['uvi'].", h_sol = ".$h_daten['sol']." WHERE h_date = ".$h_daten['stunde'];

echo $sql."<br>";

// aktualisiert betroffen Datensatz
if(mysql_query($sql) or die (mysql_error()))
{
unlink($data_dir['h-daten'].$hdaten_hdatei); // löscht Datendatei wenn das DB Update erfolgrei war
}

unset($h_daten);
}
}


Eigentlich funktioniert das Script. Ausser der wert ist "x".

Ich habe zuerst jeden Wert auf "x" geprüft, musste jedoch feststellen das es nicht finktioniert.


CODE if($h_daten['wind'] != "x")


Wiso das PHP "x" als feld anschaut ist mir ein Rätsel.
dry.gif


Ich hoffe diese infos reichen.
 
Naja, wenn du dies an mySQL schickst, sieht mysql das x als Spalte an. Aber es existiert in der Tabelle natürlich keine Spalte namens x.
CODE UPDATE ws_wetterarchiv_h SET h_temp = 3.7 , h_hum = 90.3 , h_press = 1017.7 , h_wind = x , h_main_dir = x , h_gust = x , h_gust_dir = x , h_rain_rate = 0.0 , h_rain_total = 0.20 , h_uvi = 0.5 , h_sol = 94.4 WHERE h_date = 20130321090000


Wenn du mySQL aber folgendes schickst, sieht mysql die x-en als String an. Und das sollte dann funktionieren.

CODE UPDATE ws_wetterarchiv_h SET h_temp = 3.7 , h_hum = 90.3 , h_press = 1017.7 , h_wind = 'x' , h_main_dir = 'x' , h_gust = 'x' , h_gust_dir = 'x' , h_rain_rate = 0.0 , h_rain_total = 0.20 , h_uvi = 0.5 , h_sol = 94.4 WHERE h_date = 20130321090000


Du musst also in PHP vorher die x durch 'x' ersetzen.


CODE if($h_daten['wind'] == "x") $h_daten['wind'] = "'x'";
 
Der Query funktioniert! War ein überlegungsfehler von mir!

Was mir jedoch ein Rätsel ist, warum die if-Anweisung nicht funktioniert. Das "x" zeigt dem Script, dass der Wert nicht im Query erscheinen soll:

CODE if($h_daten['wind'] != "x")
{
$sql .= ", h_wind = '".$h_daten['wind']."'";
}


Ich habe mit "strlen()" geschaut, wie lange der Wert aus der Datei ist. "x" müsste ja "eins" sein! Ausgegeben wird jedoch "drei".

Ich habe nun die Datei so angepasst, dass wenn kein Wert vom Sensor vorhanden ist "9999" ausgegeben wird und nicht "x".


CODE if($h_daten['wind'] < 9999)
{
$sql .= ", h_wind = '".$h_daten['wind']."'";
}


und nun funktioniert es
dry.gif


Solche Probleme sind für mich einfach nicht nachvollziebar.
 
Zurück
Oben