PDO最后一个插入ID

时间:2014-04-10 10:36:20

标签: php mysql

我使用$insertedId = $pdo_conn->lastInsertId();在插入查询后获取最后插入的ID,然后运行另一个插入查询:

foreach ($records as $emails_to) {
    $stmt = $pdo_conn->prepare("INSERT into emails_to (email_seq, email) values (:email_seq, :email) ");
    $stmt->execute(array(':email_seq' => $InsertedId, ':email' => $emails_to["email"]));
}

但它似乎没有识别最后一个插入ID,我收到此错误:

Fatal error: Uncaught exception 'PDOException' with message 'SQLSTATE[23000]: Integrity constraint violation: 1048 Column 'email_seq' cannot be null'

我做错了什么?

3 个答案:

答案 0 :(得分:6)

$insertedId$InsertedId不一样。变量名称区分大小写。

答案 1 :(得分:4)

您的$insertedID不匹配$InsertedID - 案例问题

编辑; darn,殴打到帖子

答案 2 :(得分:3)

在mysql中处理事务时要小心lastInsertId()。以下代码返回0而不是insert id。 这是一个例子

<?php 
try { 
    $dbh = new PDO('mysql:host=localhost;dbname=test', 'username', 'password'); 

    $stmt = $dbh->prepare("INSERT INTO test (name, email) VALUES(?,?)"); 

    try { 
        $dbh->beginTransaction(); 
        $stmt->execute( array('user', 'user@example.com')); 
        $dbh->commit(); 
        print $dbh->lastInsertId(); 
    } 
    catch(PDOException $e) { 
        $dbh->rollback(); 
        print "Error!: " . $e->getMessage() . "</br>"; 
    } 
} 
catch( PDOException $e ) { 
    print "Error!: " . $e->getMessage() . "</br>"; 
} 

&GT?;

当没有抛出异常时,lastInsertId返回0.但是,如果在调用commit之前调用lastInsertId,则返回正确的id。

获取更多信息访问 - &gt; PHP