在查询成功执行后,我需要使用填充值获取完整查询,(基本上我希望删除查询中带有问号的查询字符串并替换为相应的值)这样我就可以用它来进行事务记录。
下面是我正在使用的代码行
$stmt1 = $dbh->prepare("INSERT INTO announcements(id,routeID,ServiceAdvisoryID,ServiceAdvisoryDetailsId)
VALUES (?,?,?,?)");
$stmt1->execute(array($aid,$route,$anctype,$announcementid));
用于事务记录的查询是
$transactionText = "INSERT INTO announcements(id,routeID,ServiceAdvisoryID,ServiceAdvisoryDetailsId) VALUES (?,?,?,?)";
$stmt2 = $dbh->prepare("insert into transactionLog_tbl(userName,transactionTypeId,transactionTime,transactionText)values(?,?,?,?)");
$stmt2->execute(array($_SESSION['username'],1,date("y.d.m"),$transactionText));
我希望交易文字的问号标有相应的值。
或者
我能否获得PDO最后执行的ROW。我知道我们可以获得ID但是 我们也得到完整的行?
非常感谢任何帮助。
答案 0 :(得分:2)
如果你使用的是MySQL,你可以在那里登录,他们(很可能)会拥有完整的SQL语句。这是因为默认情况下PDO模拟准备并实际将完整构建的SQL字符串发送到MySQL服务器。来自manual's PDO::setAttribute
page:
PDO :: ATTR_EMULATE_PREPARES 启用或禁用已准备好的模拟 声明。某些驱动程序不支持本机预处理语句或 对他们的支持有限。使用此设置可以强制PDO 始终模拟预准备语句(如果为TRUE),或尝试使用本机语句 准备好的陈述(如果为FALSE)。它将永远回归模仿 准备好的声明,如果司机不能成功准备 当前查询。
PHP开发团队表示,其原因在于仿真在相对较旧的MySQL版本上运行得更快,这些版本仍然在大多数LAMP堆栈安装中。随着越来越多的人使用较新版本的MySQL +本机驱动程序,此默认行为将立即更改。
否则,您可以自己构建完整的SQL,因为您已经拥有了语句和参数。