kostenloser Webspace werbefrei: lima-city


Zwei MySQL-Anweisungen hintereinander

lima-cityForumProgrammiersprachenPHP, MySQL & .htaccess

  1. Autor dieses Themas

    dev

    Kostenloser Webspace von dev, auf Homepage erstellen warten

    dev hat kostenlosen Webspace.

    Moin!

    So, ich habe mal wieder ein Problem^^ Bin auf dem Gebiet MySQL nicht so bewandert (ich kann immerhin Select, Insert into und Update, das können andere nicht von sich behaupten :D) und habe mal eine Frage: Kann ich mehrere Anweisungen in einer Abfrage durchführen?

    Es handelt sich genau gesagt um zwei UPDATE-Befehle, die sich allerdings jeweils auf ne andere ID beziehen:

    ID - points
    1 - 63453
    2 - 8343
    3 - 222
    4 - 9454

    sql("UPDATE tabelle SET points=points+1 WHERE ID='1'");
    sql("UPDATE tabelle SET points=points-1 WHERE ID='3'");

    Diese beiden würde ich gerne in eine Abfrage packen, um eine Datenbank-Connection zu sparen ;)

    Aber wie?

    Danke schonmal :)
  2. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage


  3. Kann ich mehrere Anweisungen in einer Abfrage durchführen?


    ...einfach nacheinander schreiben in eine Abfrage durch Semikolon getrennt.

    Beispiel:
    $sql = "Update xyz SET x = 5 WHERE y=3;Update xyz SET x=2 WHERE y=6;"
    $res = mysql_query($sql);
    ...
    // achso und da du evtl. eine Funktion sql() hast, halt dort einfach beide zusammen in einem String übergeben ;-)


    Grüßle


    Beitrag geändert: 2.9.2008 9:06:37 von scout
  4. Autor dieses Themas

    dev

    Kostenloser Webspace von dev, auf Homepage erstellen warten

    dev hat kostenlosen Webspace.

    Tja hm... scheint leider nicht zu funktionieren :(

    sql("UPDATE tabelle SET points=points+1 WHERE ID='3'; UPDATE tabelle SET points=points-1 WHERE ID='5';");


    You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '; UPDATE tabelle SET points=points-1 WHERE ID='5'' at line 1
  5. Hmm komisch. Dann wird wohl deine SQL-Funktion das vorher abfangen, aber MySQL ansich unterstützt das ;-)

    Ok 2. Variante (je nach MySQL Version wird es unterstützt oder nicht):
    Die Benutzung von Transaktionen.
    Dazu vor allen Statements ein einzelnes "Begin" hinschicken und danach ein "commit" bzw. ein "rollback" falls ein Fehler auftritt. siehe http://dev.mysql.com/doc/refman/5.1/de/commit.html

    Beispiel:
    sql("begin");
    sql("update ....");
    sql("update ....");
    sql("commit");


    Grüßle
  6. Autor dieses Themas

    dev

    Kostenloser Webspace von dev, auf Homepage erstellen warten

    dev hat kostenlosen Webspace.

    Hm... also die sql-function sieht so aus:

    function sql($query)
    {
      // Verbindung zur Datenbank herstellen und Datenbank auswählen
      $link = @mysql_connect($this->Server, $this->User, $this->Pass);
      @mysql_select_db($this->DBank, $link);
    
      // Anweisung an die DB senden
      $result = @mysql_query($query, $link);
      return $result;
    }


    Genau so rufe ich sie auch auf... siehst du nen Fehler?
  7. Der User sucht nach wie vor nach einer Lösung für das Problem!

    Mit freundlichen Grüßen

    Der Push-Mod!
  8. Erstmal. Erstelle am anfang eine Datenbankverbindung und nutze sie konsequent. Es hat keinen Sinn jedes mal eine neue zu starten.

    Zweitens. mysql_ ist veraltet. Nutze PDO oder mysqli (ich empfehle ersteres). Damit bekommst du die Möglichkeit zu prepared Statements und Transactions.

    Drittens. Wenn du dann PDO / mysqli nutzt, dann solltest du wie scout sagte unbedingt transactions nutzen (muss man nicht manuell machen, zumindest PDO hat dafür Methoden), da das eine Update ohne das andere sinnlos ist. Ob man hier ein prepared Statement wirklich sinnvoll nutzen kann, wage ich zu bezweifeln.
  9. Moin,

    laß das letzte Semikolon in der Query weg.

    sql("UPDATE tabelle SET points=points+1 WHERE ID='3'; UPDATE tabelle SET points=points-1 WHERE ID='5'");


    Die Funtkionsreferenz zu mysql_query sagt:
    Hinweis: Die Anfrage sollte nicht mit einem Semikolon enden.

    Quelle: php.net

    FF
  10. Autor dieses Themas

    dev

    Kostenloser Webspace von dev, auf Homepage erstellen warten

    dev hat kostenlosen Webspace.

    fatfreddy schrieb:
    Moin,

    laß das letzte Semikolon in der Query weg.

    sql("UPDATE tabelle SET points=points+1 WHERE ID='3'; UPDATE tabelle SET points=points-1 WHERE ID='5'");


    Die Funtkionsreferenz zu mysql_query sagt:
    Hinweis: Die Anfrage sollte nicht mit einem Semikolon enden.

    Quelle: php.net

    FF

    Nein, das macht keinen Unterschied.

    nikic schrieb: Erstmal. Erstelle am anfang eine Datenbankverbindung und nutze sie konsequent. Es hat keinen Sinn jedes mal eine neue zu starten.

    Jup, du hast recht, das hab ich auch schon geändert, der Thread ist ja schon älter ;)

    Zweitens. mysql_ ist veraltet. Nutze PDO oder mysqli (ich empfehle ersteres). Damit bekommst du die Möglichkeit zu prepared Statements und Transactions.

    Drittens. Wenn du dann PDO / mysqli nutzt, dann solltest du wie scout sagte unbedingt transactions nutzen (muss man nicht manuell machen, zumindest PDO hat dafür Methoden), da das eine Update ohne das andere sinnlos ist. Ob man hier ein prepared Statement wirklich sinnvoll nutzen kann, wage ich zu bezweifeln.

    Hmm, okay ich wusste nicht, dass es so veraltet ist, nutze das schon länger und naja "Never change a running system"... aber werde ich jetzt mal machen :)

    Ist PDO wirklich so einfach oder muss ich noch was beachten?

    <?php
    /* Begin a transaction, turning off autocommit */
    $dbh->beginTransaction();
    
    /* Change the database schema and data */
    $sth = $dbh->exec("DROP TABLE fruit");
    $sth = $dbh->exec("UPDATE dessert
        SET name = 'hamburger'");
    
    /* Recognize mistake and roll back changes */
    $dbh->rollBack();
    
    /* Database connection is now back in autocommit mode */
    ?>

  11. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

Dir gefällt dieses Thema?

Über lima-city

Login zum Webhosting ohne Werbung!