【问题标题】:returns id=1 after insert mysql插入mysql后返回id=1
【发布时间】:2012-01-15 01:40:48
【问题描述】:

今天我把mysql改成了PDO。现在我有这个小问题。 因此,当我使用 mysql 并想知道我刚刚插入的行的 id 时,我只需要这样做:

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

当我打印出我得到的 $id 时:(例如:) 5462

当我现在使用同一行时,我得到 1 作为 Id。

问题: 插入该行时,其他列正在使用该 ID 在其他表中添加字段。 所以现在我得到这个错误:

警告PDO::query() [pdo.query]: SQLSTATE[23000]: 完整性约束违规:1062 重复条目 '1-double''RSVR_ID'/data/local/www/wereldreizen/html/phpclasses/class_db.php在线229

完全符合预期,因为 RSVR_ID 为 1,并且 1 已插入。

有人知道我哪里错了吗? 提前致谢!

【问题讨论】:

    标签: php mysql insert pdo


    【解决方案1】:

    使用 PDO,您不会从查询中获取新插入的 ID。使用

    PDO::lastInsertId
    

    相反。在你的情况下,这可能是例如看起来像这样:

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

    查看http://www.php.net/manual/de/book.pdo.php 了解完整的 PDO API。

    【讨论】:

    • 我发现了我之前的错误:我在 lastInsertedId 中写了 lastinsertedId。但现在我有另一个警告:警告:PDO::query() [pdo.query]: SQLSTATE[23000]: Integrity constraint violation:
    • 好的,找到了我的问题。我必须编写查询 if($this->db->query($insert)){ $waarde = $this->db->lastInsertId();返回 $waarde;在 if 而不是之前。 ) 感谢您的回答!
    【解决方案2】:

    最后一个自动插入 ID 可通过 PDO::lastInsertId 获得,您调用的方法应返回该值;像

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

    【讨论】:

    • 谢谢两位的回答,但我还是有一点小问题。我现在有这个: $waarde = $this->db->lastinsertid;但我现在收到此警告:注意:未定义的属性:PDO::$lastinsertid。使用 mysql 很简单,我只需要使用:$waarde = mysql_insert_id($this->db);
    • 对不起,忘记了(),lastinsertid是method(),见更新答案
    • 我用这个:$waarde = $this->db->lastInsertId();但是对于 ID 现在我得到 0. 而不是 1059
    猜你喜欢
    • 1970-01-01
    • 2011-11-06
    • 2014-09-06
    • 2014-12-05
    • 1970-01-01
    • 2014-06-19
    • 2012-09-12
    • 1970-01-01
    • 2012-04-05
    相关资源
    最近更新 更多