Hilfe gebraucht

Godsilla

Neuer Benutzer
Beiträge
4
Ich habe ein altes Script was umschreiben in PDO möchte und habe damit Probleme:

SQL:
    $sql = "SELECT
                        LAST_INSERT_ID()
           ";
    $result = mysql_query($sql);
    $ID = mysql_result($result,0);

    $sql = "INSERT INTO
                        User_Rechte
                        (UserID,
                         Recht
                        )
            VALUES
                        ('".$ID."',
                         'Adminbereich'
                        )
           ";
if(mysql_query($sql))
         echo "<p>Recht 'Adminbereich' erfolgreich zu User 'admin' hinzugef�gt</p>";
else {
         echo "<p>Recht 'Adminbereich' konnte nicht zu User 'admin' zugeordnet werden</p>";
         echo "<h2>Query</h2>\n";
         echo "<pre>".$sql."</pre>\n";
         echo "<h2>Fehlermeldung</h2>";
         echo "<p>".mysql_error()."</p>";
         die();
}

ich hoffe mir kann da jemand helfen.
 
Werbung:
danke für die schnelle antwort.

Das Problem ist, dass es ja ein alter Code ist und ich gerne in PDO umwandeln/upgraden möchte. Aber das Problem ist, wenn ich es mache, dann gibt er als ID immer 0 in die Datenbank ein, obwohl eine 1 eingetragen werden müsste.
 
zumindest in PG ergibt die Frage nach der zuletzt vergebenen Nummer einer Sequenze (currval() oder lastval()) einen FEHLER, wenn in der aktuellen Session noch kein nextval() aufgerufen wurde.
 
Schau dir mal die Tabelle User_Rechte an ob UserID ein Autoincrement Feld ist.
Dann brauchst du den ganzen Spass nicht, denn die DB vergibt alleine de nächste freie Nr.

Und fallst du diese doch noch brauchst kann du diese, NACH DEM INSERT, per SELECT LAST_INSERT_ID() abfragen.
 
Bis jetzt habe ich dies, aber finde den Fehler nicht:
Code:
try{
    $sql = "SELECT
                        LAST_INSERT_ID()
           ";
    $connid->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
    $result = $connid->prepare($sql);
    $ID = $result->fetchAll();
    $sql = "INSERT INTO
                        User_Rechte
                        (UserID,
                         Recht
                        )
            VALUES
                        ('".$ID."',
                         'Adminbereich'
                        )
           ";
    $connid->exec($sql);
         echo "<p>Recht 'Adminbereich' erfolgreich zu User 'admin' hinzugef�gt</p>";
} catch (PDOException $fehler) {
         echo "<p>Recht 'Adminbereich' konnte nicht zu User 'admin' zugeordnet werden</p>";
         echo "<h2>Query</h2>\n";
         echo "<pre>".$sql."</pre>\n";
         echo "<h2>Fehlermeldung</h2>";
         echo "<p>".$fehler->getMessage()."</p>";
         die();
}
 
Werbung:
also du willst in die erst was einfügen, die generiete id ermitteln und dann diese id und noch was anderes in die zweite Tabell.

Code:
privat=# create table t_user (id serial primary key, name text);
CREATE TABLE
privat=*# create table t_user_rechte(user_id int references t_user, rechte text);
CREATE TABLE
privat=*# with t_id as (insert into t_user(name) values ('Max') returning id) insert into t_user_rechte select id, 'das sind die Rechte' from t_id;
INSERT 0 1
privat=*# select * from t_user;
 id | name 
----+------
  1 | Max
(1 row)

privat=*# select * from t_user_rechte ;
 user_id |       rechte        
---------+---------------------
       1 | das sind die Rechte
(1 row)

privat=*#
 
Zurück
Oben