我有一个选项发送多行到一个表,我使用foreach来做到这一点:
if (is_array($add['jobname'])) {
$insert = "INSERT INTO job_offers (job_category, status) VALUES ";
foreach ($add['job_name'] as $key => $value) {
$insertedval[] = "
('" . safe($add['job_category'][$key]) . "',
'" . safe($add['status'][$key]) . "')";
}
}
$insert .= implode($insertedval, ",");
$last_id = db_query($insert, '+id?'); //gets the last generated ID, its a function that i created, and working great.
问题是,我想要得到最后一个ID,我得到,但我插入多行到数据库中,我想从所有插入的值中获得ID,因为它们是在同一时间发送的。
我不能把$last_id变量在foreach循环,我该怎么办?
你能试试这样吗?
$db = new PDO("mssql:host=$host;dbname=$dbname, $user, $pass");
$db->beginTransaction();
$stmt = $db->prepare('INSERT INTO job_offers (job_category, status) VALUES (?, ?)');
$insertedIds = array();
foreach ($add['job_name'] as $key => $value) {
$stmt->execute($add['job_category'][$key], $add['status'][$key]));
$id = $db->lastInsertId();
array_push($insertedIds, $id);
}
$db->commit();
id应该在inserteids中
你不能。
只保存插入数据之前的最后一个索引id,然后再执行一次,并选择该范围内的所有id。
SELECT ID FROM job_offers ID BETWEEN last-before-insert AND last-after-insert
您不需要自定义函数来获取最后一个插入id, php mysqli和php PDO扩展中已经内置了一个。
据我所知,最后一个插入id是会话感知的,这意味着您只能从当前插入请求中获得最后一个插入。
使用PHP PDO获取最后插入id
<>以前pdo -> lastInsertId ();之前使用mysqli获取最后插入id
<>以前mysqli -> insert_id;之前$pdo和$mysqli是连接变量