PDO基于lastInsertId()将新记录插入数据库

时间:2014-08-22 13:05:50

标签: php pdo

我刚刚开始学习PDO,而我只是简单地插入一个基于的新记录而苦苦挣扎 $lastid = $db->lastInsertId();

ID从另一个函数在数据库表中创建。

但是当我尝试根据该ID插入新记录时没有任何反应。

function add_name($last_id, $name) {
    $db = some_db();
    $query = "INSERT INTO team (name) VALUES (:name) WHERE id = '".$last_id."'";
    $stmt = $db->prepare($query);
    $stmt ->bindParam(':name', $name, PDO::PARAM_STR);
    $stmt->execute();
}

2 个答案:

答案 0 :(得分:2)

INSERT ... WHERE无效的SQL。如果要插入新记录,那么将在此时生成自动提示ID(如果您已为表格定义了此类ID)。

如果您尝试将新行插入到具有另一个表中最后一个id的相关表中,那么您可以将该值设置为列输入之一。所以工作流程看起来像这样:

INSERT [column data for table_a] INTO table_a
[GET autoincrement from last insert]
INSERT (table_a_foreign_key_column, [other table_b columns]) VALUES (table_a_id, [other table_b values) INTO table_b

更新:

由于UPDATE是你想要的,你可以像这样进行更新:

UPDATE team
SET name = :name
WHERE id = :id

您应该为name和id值使用参数。我仍然不清楚为什么你需要在同一个脚本执行中进行插入然后更新。这不像是你从用户那里收到了你还没有的更多信息。我猜你可以在第一次创建记录时插入这个名称值,并为自己省去多次查询的额外麻烦。

答案 1 :(得分:1)

我认为你的sql查询错误,试试这个:

function add_name($last_id, $name) {
    $db = some_db();
    $query = 'INSERT INTO team (id, name) VALUES (:id, :name)';
    $stmt = $db->prepare($query);
    $stmt ->bindParam(':name', $name, PDO::PARAM_STR);
    $stmt ->bindParam(':id', $last_id, PDO::PARAM_INT);
    $stmt->execute();
}

MySQL Insert Where query