donald2603: Einfache SQL-Abfrage mit Join

Hallo Leute, möchte mit PHP über PDO ein Update in die Datenbank einspielen. Datenbank ist eine MySQL 5.
Leider funktioniert es einfach nicht.Hier die Codezeilen:

  
$abfrage = $pdo->prepare('UPDATE usertabelle SET status=?, gueltigkeit=? JOIN profiltabelle USING benutzernummer WHERE email=?');  
  
$abfrage->bindValue(1,$string);  
$abfrage->bindValue(2,$time);  
$abfrage->bindValue(3,$mail);  
  
$abfrage->execute();  

Die Variablen sind alle befüllt. Das Problem liegt definitiv an der Abfrage. Bestimmt fehlen irgendwo Klammern oder " oder '.
Über Hilfe bin ich sehr dankbar

donald2603

  1. Hello,

    Die Variablen sind alle befüllt. Das Problem liegt definitiv an der Abfrage. Bestimmt fehlen irgendwo Klammern oder " oder '.

    Was sagt denn

    print_r($pdo->errorInfo());

    ?

    Liebe Grüße aus dem schönen Oberharz

    Tom vom Berg

    --
     ☻_
    /▌
    / \ Nur selber lernen macht schlau
    http://bikers-lodge.com
    1. Was sagt denn

      print_r($pdo->errorInfo());

      ?

      Die Ausgabe ist: Array ( [0] => 00000 [1] => [2] => )

      Das sieht ja so aus, als wären die Variablen leer?
      Wenn ich sie aber genau vor der prepare per echo ausgeben lasse, sind sie befüllt.

      donald2603

      1. Hello,

        Was sagt denn

        print_r($pdo->errorInfo());

        ?

        Die Ausgabe ist: Array ( [0] => 00000 [1] => [2] => )

        Das sieht ja so aus, als wären die Variablen leer?

        Nein, die drei Array-Elemente stehen nicht für die drei Variablen. Dass Du nun gerade drei Variablen hast, ist natürlich ein verwirrender Zufall, da Du scheinbar nicht das Handbuch gelesen hast bisher:

        http://www.php.net/manual/en/pdo.errorinfo.php

        Das deutet sehr stark auf einen Connection-Error hin. Es ist gar nicht erst ein gültiges Data-Object entstanden.

        Zeig doch mal, wie Du die Verbindung zur Datenbank aufbaust und wie Du ein neues PD-Object erzeugt hast.

        Liebe Grüße aus dem schönen Oberharz

        Tom vom Berg

        --
         ☻_
        /▌
        / \ Nur selber lernen macht schlau
        http://bikers-lodge.com
        1. Hello,

          Was sagt denn

          print_r($pdo->errorInfo());

          ?

          Die Ausgabe ist: Array ( [0] => 00000 [1] => [2] => )

          Das sieht ja so aus, als wären die Variablen leer?

          Hier noch die Links auf die Error-Codes bei MySQL:
          http://dev.mysql.com/doc/refman/5.1/de/error-messages-server.html
          http://dev.mysql.com/doc/refman/5.1/de/error-messages-client.html

          Da Du leider nicht angegeben hast, welche Datenbankversion von MySQL Du genau benutzt, muss es erst einmal dabei bleiben.

          Liebe Grüße aus dem schönen Oberharz

          Tom vom Berg

          --
           ☻_
          /▌
          / \ Nur selber lernen macht schlau
          http://bikers-lodge.com
          1. Hello,

            Was sagt denn

            print_r($pdo->errorInfo());

            ?

            Die Ausgabe ist: Array ( [0] => 00000 [1] => [2] => )

            Das sieht ja so aus, als wären die Variablen leer?

            Hier noch die Links auf die Error-Codes bei MySQL:
            http://dev.mysql.com/doc/refman/5.1/de/error-messages-server.html
            http://dev.mysql.com/doc/refman/5.1/de/error-messages-client.html

            Da Du leider nicht angegeben hast, welche Datenbankversion von MySQL Du genau benutzt, muss es erst einmal dabei bleiben.

            Hallo,

            Datenbank ist eine MySQL 5. Hatte ich geschrieben. Mehr weiß ich nicht.

            Habe die MYSQL-Anweisung angepasst, nun läuft es:

              
            $abfrage=$pdo->prepare('UPDATE usertabelle JOIN profiltabelle ON usertabelle.benutzername = profiltabelle.benutzername SET status=?, gueltigkeit=? WHERE email=?');  
            
            

            Die Ausgabe ist weiterhin: Array ( [0] => 00000 [1] => [2] => )
            Egal, es läuft.

            Danke
            donald2603

  2. Tach!

    $abfrage = $pdo->prepare('UPDATE usertabelle SET status=?, gueltigkeit=? JOIN profiltabelle USING benutzernummer WHERE email=?');

    Abfragen, ob Fehler zurückgemeldet werden, sind kein Luxus, sondern gehören zum ordentlichen Programmieren wie die Absicherung beim Klettern. Schau dir im Handbuch die verwendeten Funktionen an und besonder ihre Rückgabewerte und das Verhalten im Fehlerfall. Jedenfalls sagt mir das MySQL-Handbuch zu UPDATE eine andere Syntax. Erst kommen die Tabellenreferenzen, dann die SET-Klausel gefolgt von WHERE. Das Prepare sollte also einen Syntaxfehler melden.

    dedlfix.

    1. Tach!

      $abfrage = $pdo->prepare('UPDATE usertabelle SET status=?, gueltigkeit=? JOIN profiltabelle USING benutzernummer WHERE email=?');

      Abfragen, ob Fehler zurückgemeldet werden, sind kein Luxus, sondern gehören zum ordentlichen Programmieren wie die Absicherung beim Klettern. Schau dir im Handbuch die verwendeten Funktionen an und besonder ihre Rückgabewerte und das Verhalten im Fehlerfall. Jedenfalls sagt mir das MySQL-Handbuch zu UPDATE eine andere Syntax. Erst kommen die Tabellenreferenzen, dann die SET-Klausel gefolgt von WHERE. Das Prepare sollte also einen Syntaxfehler melden.

      dedlfix.

      Hallo dedlfix,

      sehe ich ähnlich, deswegen lautet meine Anweisung auch:

        
      error_reporting(E_ALL);  
      ini_set('display_errors', 1);  
      require'index1.php';  
      
      

      In der index1 kommt dann der ganze Code. Kann ja keiner ahnen das E_ALL sich nur auf PHP bezieht und die MySQL-Schnittstelle nicht mit beachtet.

      Zu dem Syntax:
      Hatte mich am Select orientiert. Der Join wird wohl vor dem SET ausgerufen. Man lernt nie aus. Hatte nur so einen kleinen SQL-Kurs in der UNI, wo aber nur SELECT besprochen wurde.

      Danke
      donald2603

      1. Hello,

        Hatte mich am Select orientiert. Der Join wird wohl vor dem SET ausgerufen. Man lernt nie aus. Hatte nur so einen kleinen SQL-Kurs in der UNI, wo aber nur SELECT besprochen wurde.

        Dann passt aber die von Dir gepostete Fehlermeldung (das Array) nicht dazu!

        Grüße aus dem schönen Oberharz

        Tom vom Berg

        --
         ☻_
        /▌
        / \ Nur selber lernen macht schlau
        http://bikers-lodge.com
  3. Hi,

    $abfrage = $pdo->prepare('UPDATE usertabelle SET status=?, gueltigkeit=? JOIN profiltabelle USING benutzernummer WHERE email=?');

    diese Abfrage kommt mir reichlich komisch vor.. was willst du denn eigentlich machen?

    Das hast du gemacht?

    [code lang=php]
    <?php
    $conn = new PDO($connection_string);
    $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_SILENT);
    ?>

      
    dann kannst du die Fehler auch mit $conn->errorInfo() auslesen
    
    1. äh sorry, um eine Exception zu werfen natürlich (CP-Fehler):

      <?php
      $conn = new PDO($connection_string);
      $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
      ?>