MySQL-Problem mit UPDATE-Befehl



  • Hallo, ich verstehe nicht, weswegen dieser Befehl nicht funktionieren will.
    Ich habe mir ihn von PHPMyadmin generieren lassen, und darin funktioniert er...
    Hier das Stückchen code:

    $db = mysql_connect(SQL_SERVER,SQL_USER,SQL_PASS); 
    	 mysql_select_db(SQL_DATABASE);
    	 //echo $text;
    
    	 $sql = 'UPDATE `web_content` SET `txtdata` = \'alles ist schlecht\', `last_mod` = NOW() WHERE CONVERT(`txtdata` USING utf8) = \'wie gehts\' AND CONVERT(`ident` USING utf8) = \'aktuelles\' AND `last_mod` = \'2006-11-01 14:33:48\' LIMIT 1;';
    	$result = mysql_query($sql);
    	 mysql_free_result($result);
    

    Datenbankstruktur steht, aktuellste Version.
    Angezeigter Fehler:
    Warning: mysql_free_result(): supplied argument is not a valid MySQL result resource in cmsop.php on line 47

    Bin am Verzweifeln,
    vielen Dank
    Simon



  • Was sagt denn mysql_error()?



  • Hey, das ging ja schnell.
    Mit mysql_error() komme ich leider auch nicht weiter:

    $sql = 'UPDATE `web_content` SET `last_mod` = NOW() WHERE CONVERT(`web_content`.`txtdata` USING utf8) = \'wieso geht das nicht?\' AND CONVERT(`web_content`.`ident` USING utf8) = \'aktuelles\' AND `web_content`.`last_mod` = \'2006-11-01 14:42:16\' LIMIT 1;';
    	$result = mysql_query($sql) or die ("Error (add): " . mysql_error());
    

    Fehler: Warning: mysql_free_result(): supplied argument is not a valid MySQL result resource in cmsop.php on line 48

    Also mysql_error zeigt garnichts an! Ich versteh das nicht!



  • Und was für ein "result" erwartest du bei einem UPDATE-Befehl?

    Streich das mysql_free_result() einfach raus, das hat da keinen sinn (sorry, habe ich erst jetzt bemerkt).
    Du kannst auch (zusätzlich noch) mysql_query() durch mysql_unbuffered_query() ersetzen und auf $result verzichten.

    Wenn du z.B. eine SELECT-Abfrage machst, bekommst du natürlich einen Datensatz zurückgeliefert, den du mit mysql_free_result() wieder freigeben solltest. Aber bei einem INSERT oder UPDATE bekommst du normalerweise keinen aolchen zurück, den du freigeben könntest ...



  • Dankeschön 🙂
    Gut, wenn ich das wegwerfe dann erscheint zwar nicht mehr der Fehler, aber die Änderung wird in der DB trotzdem nicht übernommen.
    Auch die unbuffered Version greift da nicht.
    Man wenn ich nur einen gescheiten Fehler hätte, dann wüsst' ich wonach ich da suchen soll...

    Also der Code sieht momentan so aus:

    <?php
    	 $db = mysql_connect(SQL_SERVER,SQL_USER,SQL_PASS); 
    	 mysql_select_db(SQL_DATABASE);
    	 $sql = 'UPDATE `web_content` SET `last_mod` = NOW() WHERE CONVERT(`web_content`.`txtdata` USING utf8) = \'wieso geht das nicht?\' AND CONVERT(`web_content`.`ident` USING utf8) = \'aktuelles\' AND `web_content`.`last_mod` = \'2006-11-01 14:42:16\' LIMIT 1;';
    	 $result = mysql_unbuffered_query($sql) or die ("Error (add): " . mysql_error());
    	?>
    

    Er meldet mir zwar keinen Fehler, dass die Anfrage falsch sei, aber er schreibt auch nicht in die DB.
    😡

    P.S.: ach genau, es kann kein Rechte-Problem des Users sein, denn der "Insert-Befehl" fuktioniert ganz normal.



  • Wenn der Datensatz nicht geändert wird, stimmt deine WHERE-Klausel vermutlich nicht; die Syntax deiner Anfrage ist aber korrekt, wenn mysql_error() keinen Text liefert.

    Deine Abfrage wie oben geschrieben wirkt mir sehr statisch: Die sitzt nur einmal, dann nie wieder! Du prüfst auf einen festen last_mod-Wert, änderst diesen aber in der Abfrage.



  • Ach daaaa!
    Danke, jetzt hab ich's verstanden.
    Vielen Dank,
    Grüße Simon 🙂


Anmelden zum Antworten