【问题标题】:zend framework get last insert id of multi row insert using executezend 框架使用执行获取多行插入的最后插入 id
【发布时间】:2011-01-06 20:00:32
【问题描述】:

如何使用多行插入获取最后插入的 ID? 这是我的代码:

$sql='INSERT INTO t (col1, col2, col3) VALUES (1, 2, 3), (4, 5, 6), (7, 8, 9)'; // example
$stmt = $contactsTable->getAdapter()->prepare($sql);
$stmt->execute(); 
$rowsAdded=$stmt->rowCount(); // mysql_affected_rows
$lastId=$stmt->lastInsertId();
echo '<br>Last ID: '.$lastId;

另外,ZF 中是否有在插入之前获取下一个插入 id 的方法?

谢谢

【问题讨论】:

    标签: zend-framework insert-id


    【解决方案1】:

    另一种解决方案。从控制器中移除 sql 代码并将它们放置在模型中。这就是他们的目的。

    如果您使用模型,您可以在类变量中给出具有自动递增列的表的名称。

    protected $_name="<table_name>"; 
    

    然后在您的模型类方法中,您可以从

    获取最后插入 id
    $insertID= $this->getAdapter()->lastInsertId();
    

    【讨论】:

      【解决方案2】:
      $lastId=$contactsTable->getAdapter()->lastInsertId();
      

      这行得通。

      【讨论】:

        【解决方案3】:

        所以,这是我用来创建多行插入、获取添加的行和最后插入的 id 的完整工作代码:

        $contactsTable = new Contacts_Model_Contacts();
        $sql='INSERT INTO t (col1, col2, col3) VALUES (1, 2, 3), (4, 5, 6), (7, 8, 9)'; // example
        $stmt = $contactsTable->getAdapter()->prepare($sql);
        $stmt->execute(); 
        $rowsAdded=$stmt->rowCount(); // mysql_affected_rows
        $lastId=$contactsTable->getAdapter()->lastInsertId(); // last inserted id
        echo '<br>Last ID: '.$lastId;
        

        【讨论】:

          【解决方案4】:

          该代码应该可以工作,但它只会让您获得上次插入的 id。

          你可以通过这个 mysql 查询获得下一个自动增量:

          SELECT Auto_increment FROM information_schema.tables WHERE TABLE_SCHEMA = 'your_db_name' AND TABLE_NAME='the_table_you_want';
          

          【讨论】:

          • 谢谢solomongaby。它给了我这个错误: 致命错误:调用未定义的方法 Zend_Db_Statement_Pdo::lastInsertId() 插入工作正常。它给了我 rowsAdded 也很好。奇怪!
          • 我明白了! $lastId=$contactsTable->getAdapter()->lastInsertId();我仍然不知道为什么它不能以另一种方式工作。
          猜你喜欢
          • 2019-11-21
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2017-10-14
          • 2016-11-25
          • 1970-01-01
          相关资源
          最近更新 更多