我刚刚开始学习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();
}
答案 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();
}