0

成功执行查询后,我需要使用填充值获取完整的查询(基本上我希望查询字符串中删除了查询中的问号并替换为相应的值),以便我可以将其用于事务日志记录。

下面是我正在使用的代码行

$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,但我们也可以获得完整的行吗?

任何帮助将不胜感激。

4

1 回答 1

2

如果您使用的是 MySQL,您可以在那里登录,他们将(很可能)拥有完整的 SQL 语句。这是因为 PDO 默认模拟准备并实际将完全构建的 SQL 字符串发送到 MySQL 服务器。从手册PDO::setAttribute

PDO::ATTR_EMULATE_PREPARES启用或禁用准备语句的模拟。一些驱动程序不支持本机准备语句或对它们的支持有限。使用此设置可强制 PDO 始终模拟预准备语句(如果为 TRUE),或尝试使用本机预准备语句(如果为 FALSE)。如果驱动程序无法成功准备当前查询,它将始终回退到模拟准备好的语句。

PHP 开发团队表示,其原因是仿真在相对较旧的 MySQL 版本上执行得更快,这些版本仍然在大多数 LAMP 堆栈安装中。随着更多人使用较新版本的 MySQL + 本机驱动程序,此默认行为将很快更改。

否则,您可以自己构建完整的 SQL,因为您已经拥有语句和参数。

于 2012-05-18T19:56:23.733 回答