PHP PDO::lastInsertId 返回 0

Posted

技术标签:

【中文标题】PHP PDO::lastInsertId 返回 0【英文标题】:PHP PDO::lastInsertId returns 0 【发布时间】:2018-03-27 18:22:35 【问题描述】:

我有类似的问题,您可以在其他问题中找到,但答案还不够: this for example

就我而言,插入是正确的,但我无法获得 ID。它始终返回 0。 为什么?

Script.php

$src_db_conn = database_connection( SRC_DB_HOST , SRC_DB_NAME, SRC_DB_USERNAME, SRC_DB_PASSWORD );
$target_db_conn = database_connection( TARGET_DB_HOST , TARGET_DB_NAME, TARGET_DB_USERNAME, TARGET_DB_PASSWORD );

$sql_insert_terms = "SELECT nom_cat, slug FROM src_table ";
$result           = $src_db_conn->query($sql_insert_terms);

foreach ( $result as $row )

    $f_wp_terms_row = array(
        'name' => $row['nom_cat'],
        'slug' => $row['slug']
    );

    $sql_insert_terms = "INSERT INTO target_table (name, slug) VALUES (:name, :slug)";
    $stmt = $target_db_conn->prepare( $sql_insert_terms );
    try 
        $target_db_conn->beginTransaction();
        $stmt->bindParam(":name", $f_wp_terms_row['name'], PDO::PARAM_STR);
        $stmt->bindParam(":slug", $f_wp_terms_row['slug'], PDO::PARAM_STR);
        $stmt->execute();
        print $target_db_conn->lastInsertId();
        $target_db_conn->commit();
     catch(PDOExecption $e) 
        $target_db_conn->rollback();
        print "Error!: " . $e->getMessage() . "</br>";
    


database_connection php 函数

function database_connection( $host, $dbname, $username, $password )
    try 
        $conn = new PDO("mysql:host=$host;dbname=$dbname", $username, $password);
        // set the PDO error mode to exception
        $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
        echo "Connected successfully";
        return $conn;
    
    catch(PDOException $e)
    
        echo "Connection failed: " . $e->getMessage();
        return false;
    
 

target_table shema

Nom 类型属性 Extra NULL foo_id bigint(20) 未签名 A_I 否 名称 varchar(200) 否 slug varchar(200) 否

【问题讨论】:

如果该列没有经过 AI 处理,那么它将无法工作,如果是这样的话。 “不是人工智能”是什么意思?自动增量? AI = AUTO_INCREMENT ;-) 你的表架构是什么? 【参考方案1】:

我必须像这样绑定列 id:

print $target_db_conn->lastInsertId("foo_id");

【讨论】:

以上是关于PHP PDO::lastInsertId 返回 0的主要内容,如果未能解决你的问题,请参考以下文章

PDO lastinsertId 在事务中返回 0,php - 5.6

PDO LastInsertId 不返回任何内容

pdo lastInsertId() 不断返回 0

PDO::lastInsertID 返回 0

PDO::lastInsertID 有时不起作用

多线程单连接中的 PDO::lastInsertId() 是不是安全?