php.de

Zurück   php.de > Webentwicklung > Datenbanken

Datenbanken SQL und Co

Antwort
 
LinkBack Themen-Optionen Thema bewerten
Alt 27.10.2011, 13:23  
Neuer Benutzer
 
Registriert seit: 27.10.2011
Beiträge: 5
PHP-Kenntnisse:
Anfänger
Sunarien befindet sich auf einem aufstrebenden Ast
Standard [Erledigt] SQL update funktioniert mit Variable aus db nicht

Hallo zusammen,
ich bin bei einem SQL-Update auf ein für mich nicht lösbares Problem gestoßen. Hab schon alles mögliche ausprobiert, ich denke, ich weiß an welcher Stelle der Fehler liegt, aber warum, das ist ne ganz andere Frage^^

Also, ich lese einen Wert aus der Datenbank aus und speichere ihn in einer Variable. Danach arbeite ich damit, am Schluss möchte ich den veränderten Wert per Update wieder in die Datenbank schicken. Das Update gibt mir einen Erfolg zurück, der Wert in der Datenbank ist allerdings noch auf dem alten Stand.

Dies tritt nur mit der Variable aus der Datenbank auf. Wenn ich nur meine Änderung versuche zu speichern oder einen beliebigen Integer-Wert, funktioniert das. Aber sobald ich die Variable aus der Datenbank zur Berechnung verwende, bleibt die Datenbank auf dem alten Stand.

Hier ein Auszug aus dem Code:
PHP-Code:
$fabfrage "SELECT f.id AS id, f.bid AS fbid, d.anspruch AS anspruch, d.max AS max, b.id AS bid, 
b.volumen AS volumen FROM tab1 f JOIN tab2 b ON f.beckenid = b.id JOIN tab3 d ON f.dataid = d.id 
WHERE f.nick = '$cronnick' ORDER BY id"
;                
$fergebnis mysql_query($fabfrage);
while(
$row mysql_fetch_object($fergebnis))
{
$fbid $row->fbid;
$volumen $row->volumen;
$anspruch $row->anspruch;
$max $row->max;
$anzahl rand(1$max);
$neuvolumen $anzahl*$anspruch;
$volumen -= $neuvolumen;

$bvaendern "UPDATE tab2 SET volumen = '$volumen' WHERE id = '$fbid'";
$bvupdate mysql_query($bvaendern);


So funktionierts:

PHP-Code:
/* ebenso wie oben*/ 
$neuvolumen $anzahl*$anspruch;
$bvaendern "UPDATE tab2 SET volumen = '$neuvolumen' WHERE id = '$fbid'";
$bvupdate mysql_query($bvaendern); 
Hilft mir aber nicht weiter, da ich das eben mit dem alten Volumen verrechnen muss..

Wäre für Hilfe dankbar.
Sunarien ist offline   Mit Zitat antworten
Sponsor Mitteilung
PHP Code Flüsterer

Registriert seit: 21.08.2005
Beiträge: 4682
PHP-Kenntnisse:
Fortgeschritten

Alt 27.10.2011, 13:29  
Erfahrener Benutzer
 
Benutzerbild von tr0y
 
Registriert seit: 26.07.2010
Beiträge: 4.856
PHP-Kenntnisse:
Fortgeschritten
tr0y ist ein wunderbarer Anblicktr0y ist ein wunderbarer Anblicktr0y ist ein wunderbarer Anblicktr0y ist ein wunderbarer Anblicktr0y ist ein wunderbarer Anblicktr0y ist ein wunderbarer Anblicktr0y ist ein wunderbarer Anblicktr0y ist ein wunderbarer Anblick
tr0y eine Nachricht über MSN schicken
Standard

Numerische Values auf Felder mit numerischer Eigenschaft werden innerhalb von Querys nicht geqoutet. Nutze der syntax wegen am besten PDO innerhalb von PHP und prepared Statements, dort brauchst du dich nicht um das Escaping und Qouting kümmern, das macht php für dich.

PHP-Code:
/* PDO init done, $pdodb is the PDO Object ! */

$query $pdodb->prepare('UPDATE tab2 SET volumen = :VOLUMEN WHERE id = :ID');
$query->bindValue(':VOLUMEN'$newValueVoluminaPDO::PARAM_INT);
$query->bindValue(':ID'$currentIDPDO::PARAM_INT);
$result $query->execute(); 
Ansonsten: Mögliche Fehler sollte man behandeln. Ist dein Errorreporting auf "alles anzeigen" hochgedreht ?
__________________
Lasse mir ohne Anwendung von Gewalt Dinge schenken, Amazon weiß darüber bald mehr.

Geändert von tr0y (27.10.2011 um 13:54 Uhr).
tr0y ist offline   Mit Zitat antworten
Alt 27.10.2011, 13:32  
Erfahrener Benutzer
 
Registriert seit: 01.09.2010
Beiträge: 4.561
PHP-Kenntnisse:
Fortgeschritten
eagle275 ist ein sehr geschätzer Menscheagle275 ist ein sehr geschätzer Menscheagle275 ist ein sehr geschätzer Mensch
Standard

hast du dir den Datensatz mal per var_dump angeschaut ...

es sollte dir doch leicht möglich sein, zu ermitteln woran es scheitert

bau mal bitte als erste Anweisungen in deiner while-Schleife folgendes ein
PHP-Code:
echo '<pre>';
var_dump($row);
echo 
'</pre>'
__________________
"Irren ist männlich", sprach der Igel und stieg von der Drahtbürste
eagle275 ist offline   Mit Zitat antworten
Alt 27.10.2011, 13:58  
Neuer Benutzer
 
Registriert seit: 27.10.2011
Beiträge: 5
PHP-Kenntnisse:
Anfänger
Sunarien befindet sich auf einem aufstrebenden Ast
Standard

Habe das mal eingebaut. Die Abfrage gibt mir den richtigen Wert aus. Allerdings als string, liegt da das Problem? Wie ändere ich das?
Was mich vor allem irritiert, ist, dass die Variable den Wert hat, den ich haben will, bevor ich sie in die Datenbank schreibe. Nur der Schritt funktioniert dann nicht mehr, aus irgendeinem Grund wird der alte Wert geschrieben bzw. nicht überschrieben.

Das ist auch die einzige Stelle, an der ein solcher Fehler auftritt, obwohl der Aufbau an anderen Stellen völlig gleich ist..
Sunarien ist offline   Mit Zitat antworten
Alt 27.10.2011, 14:02  
Erfahrener Benutzer
 
Registriert seit: 01.09.2010
Beiträge: 4.561
PHP-Kenntnisse:
Fortgeschritten
eagle275 ist ein sehr geschätzer Menscheagle275 ist ein sehr geschätzer Menscheagle275 ist ein sehr geschätzer Mensch
Standard

na - da hat dein Update wohl doch funktioniert - ansonsten

leite $volumen und andere Zahlen, mit denen du rechnen willst, nicht direkt aus den $row-Elementen ab, sondern mittels der Funktion intval (für Integer-Zahlen ohne Dezimal-Anteil) oder floatval (für Komma-Zahlen) , dann sollte auch deine Rechnung klappen..
__________________
"Irren ist männlich", sprach der Igel und stieg von der Drahtbürste
eagle275 ist offline   Mit Zitat antworten
Alt 27.10.2011, 14:18  
Neuer Benutzer
 
Registriert seit: 27.10.2011
Beiträge: 5
PHP-Kenntnisse:
Anfänger
Sunarien befindet sich auf einem aufstrebenden Ast
Standard

Damit, dass es den richtigen Wert aus der Db nimmt, meine ich den Wert vor der Berechnung. Auch mit intval($row->volumen) ändert sich leider nichts.. Irgendwie steh ich da grad vor ner Wand.

Wenn ich das hier mache:

PHP-Code:
$neuvolumen $anzahl*$anspruch;
$volumen -= $neuvolumen;
echo 
$volumen;

/*Dann das Update*/ 
dann erscheint bei dem echo der Wert, den ich berechnen wollte. Also soweit alles ok. Das Update liefert dann einen Erfolg zurück, wenn ich gleichzeitig noch andere Felder setze, funktioniert das, nur in dem Feld volumen erscheint dann nicht der neue, sondern der alte Wert, der mir dann beim nächsten Auslesen aus der DB wieder ausgegeben wird.

Nachtrag:
Habe einfach mal versucht, was passiert, wenn ich $volumen jedesmal um 1 reduziere (also nicht meine eigentliche Rechnung durchführe). In dem Fall wird der Wert nur einmal pro Skriptausführung geändert.. das heißt, wenn volumen auf 100 war, bleibt es bei jedem Schleifendurchlauf bei 100, beim nächsten Aufruf steht dann 99 drin. Irgendwie blick ich mit jedem Mal weniger durch..
Sunarien ist offline   Mit Zitat antworten
Alt 27.10.2011, 14:35  
Erfahrener Benutzer
 
Registriert seit: 01.09.2010
Beiträge: 4.561
PHP-Kenntnisse:
Fortgeschritten
eagle275 ist ein sehr geschätzer Menscheagle275 ist ein sehr geschätzer Menscheagle275 ist ein sehr geschätzer Mensch
Standard

hast du zufällig Tabellentyp "InnoDB" gewählt und implizite Transaktionen irgendwie abgeschaltet ? - versuch mal testweise direkt nach jedem Update-Statement ein mysql_query hinterher zu schicken, der nur aus "commit" besteht ....

ansonsten musst du mal weiter debuggen, warum bei mehreren Schleifen-Durchläufen nur einmal der Wert von Volumen geändert wird .. Normal ist das jedenfalls nicht - rufe nach dem Update auch mal die beiden Methoden mysql_errno(); und mysql_error(); auf - die liefern dir den letzten Fehlercode und die ausführliche Fehlermeldung von mysql- vielleicht hat "er" ja was zum Meckern gefunden
__________________
"Irren ist männlich", sprach der Igel und stieg von der Drahtbürste
eagle275 ist offline   Mit Zitat antworten
Alt 27.10.2011, 14:43  
Erfahrener Benutzer
 
Benutzerbild von tr0y
 
Registriert seit: 26.07.2010
Beiträge: 4.856
PHP-Kenntnisse:
Fortgeschritten
tr0y ist ein wunderbarer Anblicktr0y ist ein wunderbarer Anblicktr0y ist ein wunderbarer Anblicktr0y ist ein wunderbarer Anblicktr0y ist ein wunderbarer Anblicktr0y ist ein wunderbarer Anblicktr0y ist ein wunderbarer Anblicktr0y ist ein wunderbarer Anblick
tr0y eine Nachricht über MSN schicken
Standard

affected rows ausgeben

PHP-Code:
$bvaendern "UPDATE tab2 SET volumen = '$volumen' WHERE id = '$fbid'";
$bvupdate mysql_query($bvaendern);

var_dumpmysql_affected_rows() ); 
uncommited statements liefern müssen 0 in diesem Fall liefern, da die transaktion noch nicht abgeschlossen ist.
__________________
Lasse mir ohne Anwendung von Gewalt Dinge schenken, Amazon weiß darüber bald mehr.
tr0y ist offline   Mit Zitat antworten
Alt 27.10.2011, 15:37  
Neuer Benutzer
 
Registriert seit: 27.10.2011
Beiträge: 5
PHP-Kenntnisse:
Anfänger
Sunarien befindet sich auf einem aufstrebenden Ast
Standard

Also.. Hab mal das ganze andere Zeug weggenommen, was ich noch drin hatte.. Es sieht im Moment so aus, dass pro ID pro Skriptaufruf 1x das Volumen geändert wird, und zwar beim letzten Auftauchen der ID. Warum das so ist, habe ich noch nicht herausfinden können..
InnoDB ist es nicht, ganz normal MyISAM.
"commit" hat auch nichts geändert. mysql_errno gibt 0 zurück. Irgendwie muss ich es hinkriegen, dass das Update jedesmal ausgeführt wird. Da stimmt irgendwas noch nicht..

Edit: mysql_affected_rows gibt mir int(1) aus.
Sunarien ist offline   Mit Zitat antworten
Alt 27.10.2011, 15:55  
Erfahrener Benutzer
 
Benutzerbild von tr0y
 
Registriert seit: 26.07.2010
Beiträge: 4.856
PHP-Kenntnisse:
Fortgeschritten
tr0y ist ein wunderbarer Anblicktr0y ist ein wunderbarer Anblicktr0y ist ein wunderbarer Anblicktr0y ist ein wunderbarer Anblicktr0y ist ein wunderbarer Anblicktr0y ist ein wunderbarer Anblicktr0y ist ein wunderbarer Anblicktr0y ist ein wunderbarer Anblick
tr0y eine Nachricht über MSN schicken
Standard

Dann war ein row ( eine Zeile in der Tabelle ) betroffen vom Update und wurde verändert.
__________________
Lasse mir ohne Anwendung von Gewalt Dinge schenken, Amazon weiß darüber bald mehr.
tr0y ist offline   Mit Zitat antworten
Antwort


Themen-Optionen
Thema bewerten
Thema bewerten:

Forumregeln
Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are an
Gehe zu

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
[Erledigt] SQL insert... on duplicate key update... aha_01 Datenbanken 3 21.09.2011 12:44
a Link Variable übergabe in PHP funktioniert nicht ? mirojan PHP Tipps 2010 4 28.10.2010 18:02
[Erledigt] PHP Update auf den Wert 0 funktioniert nicht Extremefall PHP Tipps 2010 3 21.10.2010 12:10
[Erledigt] UPDATE SQL -&gt; PHP funktioniert nicht jnv PHP Tipps 2010 12 21.07.2010 17:45
[Erledigt] Update funktioniert nicht Capfly PHP Tipps 2009 35 02.02.2009 19:22
Undefined variable Undefined property: block xxJJxx PHP Tipps 2008 16 05.08.2008 15:30
Update - Sperre funktioniert nicht areUkidding PHP Tipps 2008 39 26.06.2008 22:47
Update funktioniert nicht Sachse PHP Tipps 2007 6 14.12.2005 08:46
Update funktioniert nicht wizzardxx PHP Tipps 2005-2 12 13.08.2005 21:17
MySQL UPDATE Befehl funktioniert nicht PHP Tipps 2005 6 24.01.2005 15:03
PHP/MySQL =&amp;gt; UPDATE ... SET -- Feldname als Variable? Datenbanken 4 14.01.2005 16:15
mysql update query mit mehreren Tabellen funktioniert nicht PHP-Fortgeschrittene 5 08.01.2005 16:29
UPDATE funktioniert irgendwie nicht yoshy PHP Tipps 2004 5 26.07.2004 10:51
UPDATE funktioniert nicht PHP Tipps 2004 4 08.06.2004 17:25

Besucher kamen über folgende Suchanfragen bei Google auf diese Seite
sql update variable, php update db geht nicht, sql variable, einen wert in datenbank updaten, sql update variabel, sql update set skalarvariable, variablen in sql update php, php pdo \update set\, sql update variablen feldnamen, php variable in sql query update set, php sql update where mit variable, variable in sql update, sql variables update, update set variable sql, sql variable update, update sql variablen, mysql umwandlungsoptionen, php udate in db geht nicht, sql update mit variablen, update sql funkt

Alle Zeitangaben in WEZ +2. Es ist jetzt 15:06 Uhr.




Powered by vBulletin® Version 3.7.2 (Deutsch)
Copyright ©2000 - 2012, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO 3.2.0
Aprilia-Forum, Aquaristik-Forum, Liebeskummer-Forum, Zierfisch-Forum, Geizkragen-Forum