El Torito: Datensatz aus DB überschreiben

Hallo,

dies ist sicher eine zimlich bekolpte frage, aber ich muss sie stellen, also:

ich möchte einen Wert in eine bestimmten datensatz einer MySQL-DB speichern/überschreigen. wie kann ich ihn ansprechen?

  1. Hallo

    ich möchte einen Wert in eine bestimmten datensatz einer MySQL-DB speichern/überschreigen. wie kann ich ihn ansprechen?

    Wenn jede Zeile eine eindeutige id hat, und die sollte sie haben, dann:

    UPDATE tabelle SET (spalte1='$wert1',spalte2='$wert2') WHERE id = 1;

    Tschö, Auge

    --
    Die Musik drückt aus, was nicht gesagt werden kann und worüber es unmöglich ist zu schweigen.
    (Victor Hugo)
  2. Hallo,

    dies ist sicher eine zimlich bekolpte frage, aber ich muss sie stellen, also:

    Die Frage ist durchaus nicht "bekolpt" (bekloppt?), nur die Frage_stellung_ hätte etwas präziser ausgedrückt werden können. Ansonsten ist es recht schwer, dein Problem zu lösen.

    ich möchte einen Wert in eine bestimmten datensatz einer MySQL-DB speichern/überschreigen. wie kann ich ihn ansprechen?

    Du meinst bestimmt die UPDATE-Syntax. Mit ihr kannst du bestimmte Datensätze aktualisieren und damit natürlich überschreiben. Näheres unter dem angegebenen Link.

    Gruß
    Lachgas

    1. Hallo,,

      meinst du so sollte es gehen?

      $sql = "UPDATE tabelle SET pcid_erfolgreich=$neues_erfolgreich";

      die spalte heiss pcid_erfolgreich
      und der neue Wert $neues_erfolgreich

      bei mir geht es auf jedenfall nicht, macht einfach nix...:-(

      1. Hello,

        $sql = "UPDATE tabelle SET pcid_erfolgreich=$neues_erfolgreich";

        So würde die gesamte Tabelle in der numerischen Spalte pcid_erfolgreich einen neuen Wert $neues_erfolgreich zugeweisen bekommen.

        'Macht absolut nichts' ist eine Aussage, die ohne ausreichende fehlerbehandlung eigentlich ein JEHOVA verdient hätte!

        Bitte nimm den Rückgabewert von mysql_query() auch auf und werte ihn aus.
        Bitte frage grundsätzlich nach einem mysql_query($sql,$con) auch ob mysql_errno($con) === 0
        und wenn nicht, dann lass Dir die Nummer ausgeben und außerdem mysql_error($con). Das ist die Klartextmeldung.

        Harzliche Grüße aus http://www.annerschbarrich.de

        Tom

        --
        Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
        Nur selber lernen macht schlau
  3. ich möchte einen Wert in eine bestimmten datensatz einer MySQL-DB speichern/überschreigen. wie kann ich ihn ansprechen?

    also entweder wie die anderen schon gesagt hat mit update, wenn du aber noch nicht weisst, wenn du aber einen datensatz aktualisieren willst und weisst noch nicht, ob er überhaupt da ist, dann am besten zuerst entsprechend löschen und dann neu einfügen, sprich:

    DELETE FROM tabelle WHERE wert='ein_wert' AND wert2='ein_anderer_wert';
    INSERT INTO tabelle (wert, wert2) VALUES ('der_wert', 'der_andere_wert');

    wies mit noch mehr werten geht denk ich ist klar ;)

    1. Hello,

      also entweder wie die anderen schon gesagt hat mit update, wenn du aber noch nicht weisst, wenn du aber einen datensatz aktualisieren willst und weisst noch nicht, ob er überhaupt da ist, dann am besten zuerst entsprechend löschen und dann neu einfügen, sprich:

      DELETE FROM tabelle WHERE wert='ein_wert' AND wert2='ein_anderer_wert';
      INSERT INTO tabelle (wert, wert2) VALUES ('der_wert', 'der_andere_wert');

      Das ist eine ganz schlechte Idee, da damit auch alle Referenzen neu hergestellt werden müssten.
      Die referenzielle Integrität wird von MySQL nicht unterstützt, oder ist sie endlich drin?

      Es gibt REPLACE für diesen Zweck. Das sollte man aber tunlichst nur auf GENAU EINEN EINZIGEN SATZ anwenden, sonst hat man leicht Chaos.

      REPLACE ersetzt vorhandene Daten oder legt sie neu an, wenn sie noch nicht vorhanden waren.

      Harzliche Grüße aus http://www.annerschbarrich.de

      Tom

      --
      Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
      Nur selber lernen macht schlau
      1. Hi,

        Das ist eine ganz schlechte Idee, da damit auch alle Referenzen neu hergestellt werden müssten.

        wo witterst Du denn referenzielle Integritaet bei der gegebenen Anforderungslage mit einer Tabelle?

        Es gibt REPLACE für diesen Zweck. Das sollte man aber tunlichst nur auf GENAU EINEN EINZIGEN SATZ anwenden, sonst hat man leicht Chaos.

        Heisst das bei mir und meinem RDBMS vielleicht UPDATE?

        Gruss,
        Ludger

        1. Hello,

          wo witterst Du denn referenzielle Integritaet bei der gegebenen Anforderungslage mit einer Tabelle?

          Ich wittere Integritätsbruch, wenn man "einfach so" löscht und einen RC-Conflict, wenn man die zwei Statements nicht mit einem LOCK bindet.

          Es gibt REPLACE für diesen Zweck. Das sollte man aber tunlichst nur auf GENAU EINEN EINZIGEN SATZ anwenden, sonst hat man leicht Chaos.

          Heisst das bei mir und meinem RDBMS vielleicht UPDATE?

          Dazu müssstest Du mir sagen, wie Dein DBMS denn heißt ;-)

          Harzliche Grüße aus http://www.annerschbarrich.de

          Tom

          --
          Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
          Nur selber lernen macht schlau
      2. Das ist eine ganz schlechte Idee, da damit auch alle Referenzen neu hergestellt werden müssten.

        erm. Ok. Geb ich dir recht. Das funktioniert eigentlich nur, wenn man mit nem skript arbeitet, wo man jedesmal absolut eindeutige ids vergibt... mach ich generell so, vergesse aber immer das das nicht standard ist ;)

        also in dem sinne:

        DELETE FROM blablabla WHERE id = $id
        INSERT INTO blablabla (id, wert) VALUES ('$id', 'neuer_wert')

        usw

        wenn du also ne eindeutige id hast, und einen datensatz dazu updaten willst oder neu anlegen wenn er noch nicht da ist, dann klappt das wunderbar, aber auch nur dann...

        1. Hello,

          Lock table blablabla write;

          DELETE FROM blablabla WHERE id = $id
          INSERT INTO blablabla (id, wert) VALUES ('$id', 'neuer_wert')

          unlock tables;

          Auch bei MySQL 4.x mus  man Sstatements einer Familie noch 'händisch' binden.

          Harzliche Grüße aus http://www.annerschbarrich.de

          Tom

          --
          Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
          Nur selber lernen macht schlau
          1. Lock table blablabla write;

            DELETE FROM blablabla WHERE id = $id
            INSERT INTO blablabla (id, wert) VALUES ('$id', 'neuer_wert')
            unlock tables;

            OK. Klar. Um komplett konform zu bleiben und kein Risiko einzugehen macht das sinn...

            iss aber bei kleinen anwendungen nicht wirklich nötig, solang man nicht massig zugriffe und komplexe anderslaufende abfragen hat ...

            aber recht hast du schon. das muss ich mir noch angewöhnen ;)

            1. Hello,

              Lock table blablabla write;

              DELETE FROM blablabla WHERE id = $id
              INSERT INTO blablabla (id, wert) VALUES ('$id', 'neuer_wert')
              unlock tables;

              OK. Klar. Um komplett konform zu bleiben und kein Risiko einzugehen macht das sinn...

              iss aber bei kleinen anwendungen nicht wirklich nötig, solang man nicht massig zugriffe und komplexe anderslaufende abfragen hat ...

              Das mit 'kleinen' oder 'großen' Anwendungen nichts zu tun, sondern nur mit Zufall.
              Anwendungen mit vielen Nutzern und professionellen Anwendungen benutzen ganz bestimmt nicht MySQL, wenn der Planer haftet und ganz bei Trost ist.

              Dann wird man garantiert ein DBMS mit Transaktions-Steuerung und Transaktions-Logging benutzen, um konkurrierende Vorgangsvrarbeitungen und kontinuierliches Backup gewährleisten zu können. davon ist MySQL bestimmt noch vier Generationen entfernt.

              Das Binden zusammengehörender Queries durch eine geschickte Locking-Strategie sollte man daher bereits von Anfang an einführen. Bei wenigen Zugriffen kann man die Fehler, die dennoch auftreten, häufig noch lokalisieren und ausmerzen. Wenn die Zugriffszahlen erst gestigen sind, kann man da meistens nichts mehr reparieren, da das Chaos dann alles zerschreddert.

              Ich hatte da letztens einen MySQL-Reparaturfall zu erledigen, an dem ich mir fast die Zähne ausgebisen hätte. Wenn die Zugriffszahlen stiegen, kamen immer merkwürdige Fehlermeldungen in den Logs an. '10 is not a valid mysql-ressoeurce' oder so ähnlich. Bis ich darauf kam, dass der ursprüngliche Programmentwickler schlampig gecoded hatte und immer das mysql_free_result() (usw.) vergessen hatte, waren ca. 8 Stunden rum.

              Harzliche Grüße aus http://www.annerschbarrich.de

              Tom

              --
              Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
              Nur selber lernen macht schlau
              1. Das mit 'kleinen' oder 'großen' Anwendungen nichts zu tun, sondern nur mit Zufall.

                wo du recht hast hast du schon recht ;) aber der kleine programmierer ist froh, wenn er mal sinn und verstand von einem befehl verstanden hat, und die meisten leute die mit mysql arbeiten sind ja autodidakten, aber ein solcher ratschlag ist auf jedefall schon zu beherzigen. daher sagte ich ja auch, das ich mir das mal angewöhnen muss (*scriptedurchwälzundüberarbeite*) *gg*

                Das Binden zusammengehörender Queries durch eine geschickte Locking-Strategie sollte man daher bereits von Anfang an einführen. Bei wenigen Zugriffen kann man die Fehler, die dennoch auftreten, häufig noch lokalisieren und ausmerzen. Wenn die Zugriffszahlen erst gestigen sind, kann man da meistens nichts mehr reparieren, da das Chaos dann alles zerschreddert.

                jau. aber wie gesagt: viele leute sind einfach autodidakt ... dann suchst du im netz, findest iregndwo ein schlecht dokumentiertes skript das tut, was du wolltest. die hälfte davon versteht man nicht... man lässt es mal testweise weg ums zu verstehen. es tut IMMERNOCH was man wollte ----> der rest ist doch für mich unnötig und der ewige programmierfehler schleicht sich ein. glaub mir.... das geht mir oft so. man lernt halt nie aus ...

                Ich hatte da letztens einen MySQL-Reparaturfall zu erledigen, an dem ich mir fast die Zähne ausgebisen hätte. Wenn die Zugriffszahlen stiegen, kamen immer merkwürdige Fehlermeldungen in den Logs an. '10 is not a valid mysql-ressoeurce' oder so ähnlich. Bis ich darauf kam, dass der ursprüngliche Programmentwickler schlampig gecoded hatte und immer das mysql_free_result() (usw.) vergessen hatte, waren ca. 8 Stunden rum.

                und da muss ich direkt fragen: mysql_free_result() ?? was tut das ?

                da hab ich echt schonwieder keine ahnung mehr, aber wenn ich das hier lese denk ich auch DAS sollte ich mir angewöhnen O:-)

                1. Hello,

                  und da muss ich direkt fragen: mysql_free_result() ?? was tut das ?

                  da hab ich echt schonwieder keine ahnung mehr, aber wenn ich das hier lese denk ich auch DAS sollte ich mir angewöhnen O:-)

                  Du solltest einfach mitlesen, zuhören, auch gegenhalten... Denn nicht alle Tipps sind nachvollziehbar ;-)

                  Aber jedes reale System hat Grenzen, und so kann MySQL/PHP in der Srtandardeinstellung 9 Ressource-Handles gleichzeitig öffnen. Wenn man nun in einem Script eine Schleife aufbaut für Abfragen, oder eine Funktion in einer Schleife benutz, die zwar Queries durchführt, aber die Ergebnis-Scpeicherbereiche nicht wieder freigibt, dann sind die 9 Handles bald erschöpft und man läuft auf diesen (nicht triggernden) Fehler.

                  Das Ergebnis des Scriptes ist dann auf jeden Fall falsch.

                  Harzliche Grüße aus http://www.annerschbarrich.de

                  Tom

                  --
                  Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
                  Nur selber lernen macht schlau
                  1. Aber jedes reale System hat Grenzen, und so kann MySQL/PHP in der Srtandardeinstellung 9 Ressource-Handles gleichzeitig öffnen. Wenn man nun in einem Script eine Schleife aufbaut für Abfragen, oder eine Funktion in einer Schleife benutz, die zwar Queries durchführt, aber die Ergebnis-Scpeicherbereiche nicht wieder freigibt, dann sind die 9 Handles bald erschöpft und man läuft auf diesen (nicht triggernden) Fehler.

                    Das Ergebnis des Scriptes ist dann auf jeden Fall falsch.

                    also ums richtig zu verstehen:

                    wenn ich in einem skript 10 mal :

                    $result = mysql_query("blablabla");

                    reinschreibe gehts zwangsläufig in die hose, wenn ich nicht zwischendurch mal wieder:

                    mysql_free_result($result);

                    eingebe?

                    DAS sind wirklich mal gute Tips. Ich war noch nie bei ner 10ten Abfrage, aber ich WETTE ich wär mal wieder total verzweifelt...

                    Du hast mir grad prophylaktische graue Haare erspart ;)

                    Danke + Grüsse
                    Thomas

        2. Hallo,
          Verstehe ich dies richtig(anscheinend nicht, da es bei mir nicht funzt):
          die Tabelle heist: picd
          die Spalten pcid_gesammthaft und pcid_erfolgreich
          die Variabeln, welche nun die Einträge überschreiben sollten: $neues erfolgreich und $neues_gesammt.

          sql = "delete FROM pcid WHERE pcid_name = $pcid_name INSERT INTO pcid (neues_erfolgreich, neues_gesamt) VALUES ('$neues_erfolgreich', '$neues_gesamt')";

          wo liegt der fehler??

          1. Hallo,

            sql = "delete FROM pcid WHERE pcid_name = $pcid_name INSERT INTO pcid (neues_erfolgreich, neues_gesamt) VALUES ('$neues_erfolgreich', '$neues_gesamt')";

            wo liegt der fehler??

            1.) $sql und nicht sql
            2.) Ist $pcid_name vom Typ Integer? Sonst in ''
            3.) SQL-Befehle müssen mit ; abgetrennt werden (zwischen $pcid_name und INSERT)

            Außerdem ist diese Methode viel zu aufwendig, siehe mein anderes Posting.

            Gruß
            Lachgas

          2. sql = "delete FROM pcid WHERE pcid_name = $pcid_name INSERT INTO pcid (neues_erfolgreich, neues_gesamt) VALUES ('$neues_erfolgreich', '$neues_gesamt')";

            wo liegt der fehler??

            Erstens:
            Das sind 2 seperate Queries, also mit php am besten 2 mal mysql_query(...) absetzen oder einfach direkt in der Shell durch semikolon ( ; )trennen ;)

            Zweitens:
            was ist $pcid_name  ?
            was stand denn vorher in der Tabelle und soll jetzt durch $neues_erfolgreich und $neues_gesamt ersetzt werden?

            Drittens:
            INSERT INTO picd (pcid_gesammthaft, pcid_erfolgreich)
            VALUES ('$neues_erfolgreich', '$neues_gesamt')