3 Datenbank Anweisungen hintereinander
lima-city → Forum → Programmiersprachen → PHP, MySQL & .htaccess
anweisung
auszahlung
befehl
betrag
code
date
datenbank
datensatz
datum
format
innerhalb einfacher anzeichen
klausel
machen
set
setting
sinn
string
tabelle
update
zahl
-
Hallo !
Ich brauche nochmal eure Hilfe.
Ich habe versucht 3 SQL Abfragen hintereinander zu schreiben:
... if((mysql_query("update auszahlungen set ausgezahlt=1 where id=$id")) AND (mysql_query("update settings set ausgezahlt = ausgezahlt+$betrag")) AND (mysql_query("INSERT INTO auszahlungen SET datum2 = '$datum2' where id=$id")) { ...
Die letzte Anweisung wird nicht ausgeführt, die anderen 2 schon.
Mache ich was falsch?
Mfg -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage
-
Hi,
mal schnell geschaut, würde ich sagen, es fehlt zumindest eine schließende runde Klammer vor der geschweiften. Ob das nun wirklich dein Problem ist kannst du ja probieren.
Alternativ könntest du auch z.B. mal hier http://www.w3schools.com/SQl/sql_update.asp nachlesen wie du mit nur einer Anweisung auskommst.
Gruß
Manni -
Ich habe folgende Punkte gefunden:
Deine zweite Anweisung enthält keine WHERE-Klausel!!!!
Damit wendest Du Dein Update auf alle Datensätze der Tabelle an. Falls Deine Tabelle 'settings' allerdings nur eine einzige Zeile enthalten sollte, brauchst Du natürlich keine WHERE-Klausel ...
Deine dritte Anweisung ergibt so auch keinen Sinn, da Du den Datensatz sicherlich nicht einfügen (INSERT INTO) sondern nur ändern (UPDATE) willst! In einem INSERT INTO Befehl macht eine WHERE-Klausel keinen Sinn, da der Datensatz mit der ID sowieso noch nicht existieren sollte!
Deine Anweisungen habe ich noch einmal "korrigiert" in zwei Anweisungen zusammengeschrieben (die erste und dritte habe ich kombiniert).
In der zweiten habe ich noch eine Unsicherheit entdeckt: welchen Datensatz in der Tabelle 'settings' möchtest Du denn ändern?!? Gibt es dort eine korrespondierende ID mit dem Namen SID (wie ich es in meiner Anweisung angenommen habe?!?).
... if( mysql_query("UPDATE auszahlungen SET ausgezahlt=1, datum2='$datum2' WHERE id=$id") AND mysql_query("UPDATE settings SET ausgezahlt = ausgezahlt+$betrag WHERE sid=$id")) { ...
Mir fällt auch auf, dass es in der Tabelle 'settings' den gleichen Feldnamen wie in der Tabelle 'auszahlungen' gibt. das ist syntaktisch zwar korrekt, kann aber leicht für Verwirrung sorgen!
Ich hoffe, dass ich Deine Absicht hinter den SQL-Kommandos so einigermaßen richtig erraten habe.
Gruß, Carsten
-
haniwo schrieb:
Ich habe folgende Punkte gefunden:
Deine zweite Anweisung enthält keine WHERE-Klausel!!!!
Damit wendest Du Dein Update auf alle Datensätze der Tabelle an. Falls Deine Tabelle 'settings' allerdings nur eine einzige Zeile enthalten sollte, brauchst Du natürlich keine WHERE-Klausel ...
Deine dritte Anweisung ergibt so auch keinen Sinn, da Du den Datensatz sicherlich nicht einfügen (INSERT INTO) sondern nur ändern (UPDATE) willst! In einem INSERT INTO Befehl macht eine WHERE-Klausel keinen Sinn, da der Datensatz mit der ID sowieso noch nicht existieren sollte!
Deine Anweisungen habe ich noch einmal "korrigiert" in zwei Anweisungen zusammengeschrieben (die erste und dritte habe ich kombiniert).
In der zweiten habe ich noch eine Unsicherheit entdeckt: welchen Datensatz in der Tabelle 'settings' möchtest Du denn ändern?!? Gibt es dort eine korrespondierende ID mit dem Namen SID (wie ich es in meiner Anweisung angenommen habe?!?).
... if( mysql_query("UPDATE auszahlungen SET ausgezahlt=1, datum2='$datum2' WHERE id=$id") AND mysql_query("UPDATE settings SET ausgezahlt = ausgezahlt+$betrag WHERE sid=$id")) { ...
Mir fällt auch auf, dass es in der Tabelle 'settings' den gleichen Feldnamen wie in der Tabelle 'auszahlungen' gibt. das ist syntaktisch zwar korrekt, kann aber leicht für Verwirrung sorgen!
Ich hoffe, dass ich Deine Absicht hinter den SQL-Kommandos so einigermaßen richtig erraten habe.
Gruß, Carsten
Ich habe es so probiert.
Aber es wird der Wert für $datum2 nicht in die Datenbank gespeichert. Die Variable habe ich so geschrieben:
$datum2 = date("d.m.Y H:i");
Bei der zweiten Abfrage muss es id heißen, nicht sid
Bei der Abfrage mit settings hab ich nur einen Eintrag in der Tabelle. Da brauch ich keine WHERE Klausel, oder?
Beitrag zuletzt geändert: 24.1.2010 12:39:19 von davy -
Datumsangaben kannst Du in den folgenden Formaten eingeben:
Sie können DATETIME-, DATE- und TIMESTAMP-Werte mit einem der folgenden gängigen Formate angeben (siehe hier:http://dev.mysql.com/doc/refman/5.1/de/datetime.html) :
* Als String im Format 'YYYY-MM-DD HH:MM:SS' oder 'YY-MM-DD HH:MM:SS'. Eine weniger strikte Syntax ist ebenfalls erlaubt: Ein beliebiges Interpunktionszeichen darf als Trennzeichen zwischen Datums- oder Zeiteinheiten benutzt werden. Beispielsweise sind '98-12-31 11:30:45', '98.12.31 11+30+45', '98/12/31 11*30*45' und '98@12@31 11^30^45' gleichwertig.
* Als String im Format 'YYYY-MM-DD' oder 'YY-MM-DD'. Eine weniger strikte Syntax ist auch hier erlaubt. Beispielsweise sind '98-12-31', '98.12.31', '98/12/31' und '98@12@31' gleichwertig.
* Als String ohne Trennzeichen in den Formaten 'YYYYMMDDHHMMSS' oder 'YYMMDDHHMMSS', sofern der String als Datum sinngebend ist. Zum Beispiel werden '19970523091528' und '970523091528' als '1997-05-23 09:15:28' interpretiert, aber '971122129015' ist unzulässig (der Minutenanteil ist unsinnig) und wird deswegen zu '0000-00-00 00:00:00'.
* Als String ohne Trennzeichen in den Formaten 'YYYYMMDD' oder 'YYMMDD', sofern der String als Datum sinngebend ist. Zum Beispiel werden '19970523' und '970523' als '1997-05-23' interpretiert, aber '971332' ist unzulässig (der Tages- und der Minutenanteil sind unsinnig) und wird deswegen zu '0000-00-00'.
* Als Zahl in den Formaten YYYYMMDDHHMMSS oder YYMMDDHHMMSS, sofern die Zahl als Datum sinngebend ist. Beispielsweise werden sowohl 19830905132800 als auch 830905132800 als '1983-09-05 13:28:00' interpretiert.
* Als Zahl in den Formaten YYYYMMDD oder YYMMDD, sofern die Zahl als Datum sinngebend ist. Beispielsweise werden sowohl 19830905 als auch 830905 als '1983-09-05' interpretiert.
* Als Ergebnis einer Funktion, die einen Wert zurückgibt, der im Kontext von DATETIME, DATE oder TIMESTAMP sinngebend ist, z. B. NOW() oder CURRENT_DATE.
Wenn Deine ID-Spalte für settings 'id' heißt, dann musst Du natürlich id verwenden und nicht sid (ich hatte den Namen sid nur verwendet, weil ich grundsätzlich unterschiedliche Feldnamen in unterschiedlichen Tabellen verwende) .
Und eine WHERE klausel brauchst Du tatsächlich nicht, wenn es nur einen Datensatz gibt. -
davy schrieb:
Aber es wird der Wert für $datum2 nicht in die Datenbank gespeichert. Die Variable habe ich so geschrieben:
Die Anführungszeichen um die Variable $datum2 stören. Innerhalb einfacher Anzeichen werden Variablen bei php nicht geparsed.
FF -
fatfreddy schrieb:
davy schrieb:
Aber es wird der Wert für $datum2 nicht in die Datenbank gespeichert. Die Variable habe ich so geschrieben:
Die Anführungszeichen um die Variable $datum2 stören. Innerhalb einfacher Anzeichen werden Variablen bei php nicht geparsed.
FF
Meinst du in etwa so?
... if( mysql_query("UPDATE auszahlungen SET ausgezahlt=1, datum2=$datum2 WHERE id=$id") AND mysql_query("UPDATE settings SET ausgezahlt = ausgezahlt+$betrag WHERE id=$id")) { ...
datum2 wird leider nicht in die Datenbank gespeichert, die anderen 2 Anweisungen schon.
Ist vielleicht hier dran was falsch?
$datum2 = date("d.m.Y H:i"); -
Hi,
davy schrieb:
das hängt davon ab, welchen Typ das Datenbankfeld hat, in das du das Datum schreiben möchtest. So wie ich das sehe, sollte zumindest die Reihenfolge stimmen. Wenn du also y.d.m in der Datenbank stehen hast, macht das Fromat d.m.y Probleme.
Ist vielleicht hier dran was falsch?
$datum2 = date("d.m.Y H:i");
Gruß
Manni -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage