2011-12-07 4 views
0

今日私はmysqlをPDOに変更しました。そして今私はこの小さな問題を抱えています。私はMySQLを使用して、私はちょうど挿入された行のIDを知りたいと思ったとき は、だから、僕はこれをしなければならなかった。(例えば:) 5462は、mysqlの後にid = 1を返します

:私は私が得た$ IDを印刷

$id = $obj_db_write->insert("reservations",$arr_kolommen,$arr_waardes); 

私は今、同じ行を使用するとき、Idとして1を取得します。

問題: 行が挿入されると、他の列はそのIDを使用して他の表にフィールドを追加しています。 は、だから今、私はこのエラーを取得する:RSVR_IDが1であり、1がすでに挿入されているので、かなり期待何

Warning: PDO::query() [pdo.query]: SQLSTATE[23000]: Integrity constraint violation: 1062 Duplicate entry '1-double' for key 'RSVR_ID' in /data/local/www/wereldreizen/html/phpclasses/class_db.php on line 229

誰かが間違っている場所を知っていますか? ありがとうございます!

答えて

1

PDOでは、クエリの結果として新たに挿入されたIDを取得しません。代わりに

PDO::lastInsertId 

を使用してください。あなたのケースでは、それは可能性があります。そのように見える:

$affectedRows = $obj_db_write->exec(your-insert-statement); 
$lastInsertedID = $obj_db_write->lastInsertId(); 

はフルPDO APIのhttp://www.php.net/manual/de/book.pdo.phpをチェックしてください。

+0

私は以前の間違いを見つけました:私はlastInsertedIdのlastinsertedId inseadを書きました。しかし、今私は別の警告があります:警告:PDO :: query()[pdo.query]:SQLSTATE [23000]:整合性制約違反: – user993177

+0

問題が見つかりました。 ($ this-> db-> query($ insert)){ \t $ waarde = $ this-> db-> lastInsertId();というクエリを書く必要がありました。 return $ waarde;もしかしたら前のことではなく。 )答えをありがとう! – user993177

2

最後の自動挿入IDはPDO::lastInsertIdで利用でき、呼び出し元のメソッドはその値を返す必要があります。何かのように

class ... { 
    public function insert(...) { 
     ... 
     return $this->pdo->lastinsertid(); 
    } 
+0

お返事ありがとうございますが、まだ少し問題があります。私は今これを持っています:$ waarde = $ this-> db-> lastinsertid;しかし、今私はこの警告を得る:通知:未定義のプロパティ:PDO :: $ lastinsertid。 mysqlを使うと簡単に使えました。$ waarde = mysql_insert_id($ this-> db); – user993177

+0

申し訳ありませんが、lastinsertidがメソッド()であることを忘れました。更新された回答を参照してください – VolkerK

+0

私はこれを使用します:$ waarde = $ this-> db-> lastInsertId();しかしIDのために今私は1059の代わりに0を得る – user993177

関連する問題