我在一个查询中同时有一个"insert into"answers"select"查询
$_SESSION['LoginUID']=1;
$Mesaj='ffdd';
$Ek=12;
$cid=112;
$Kaydet=$db->query("
Insert Into Reply (Kimden,Mesaj,Ek,cid)
Values (".$_SESSION['LoginUID'].",'$Mesaj',$Ek,$cid);
select r_id,KayitZaman from Reply
where r_id=LAST_INSERT_ID();")
->fetch(PDO::FETCH_ASSOC);
但我无法选择最后插入的行。它必须像这样返回
m_id nbspKayitZaman nbsp nbsp nbsp
16 nbsp nbsp 1413130807000
我如何在一个查询中做到这一点?或者其他方式。
不能同时运行两个查询,一次只能运行一个
插入后,运行select:
$stmt = $db->query('select r_id,KayitZaman from Reply where r_id=LAST_INSERT_ID()');
或者您可以使用内置函数传递最后插入的Id
$stmt = $db->prepare('select r_id,KayitZaman from Reply where r_id= ?');
$stmt->execute(array($db->lastInsertId()));
如果您想同时完成整件事,那么创建一个存储过程。
编辑:
DELIMITER //
CREATE PROCEDURE sp_insert_get_reply(IN `p_Kimden`,
IN `p_Mesaj`,
IN `p_Ek`,
IN `p_cid`)
BEGIN
INSERT INTO `Reply` (`Kimden`, `Mesaj`, `Ek`, `cid`)
VALUES (p_Kimden, p_Mesaj, p_Ek, p_cid);
SELECT `r_id`, `KayitZaman`
FROM Reply WHERE r_id=LAST_INSERT_ID()
END //
DELIMITER ;
然后从PDO:调用函数
$stmt = $db->prepare('CALL sp_insert_get_reply(?, ?, ?, ?)');
$stmt->execute(($_SESSION['LoginUID'], $Mesaj, $Ek, $cid));
您应该尝试在PDO exec()
调用中发出insert
,然后在query
调用中使用select
。您仍然可以在select
查询中使用LAST_INSERT_ID()
并保持数据完整性。
如果由于某种原因,必须在程序的单个请求中执行这两条语句,则可以使用mysqli
的多语句功能,也可以编写存储过程。