【问题标题】:In PHP + PDO fetch the details of the query last executed or fill the question marks in query with corresponding entries在 PHP + PDO 中获取最后执行的查询的详细信息或用相应的条目填充查询中的问号
【发布时间】:2012-05-26 09:30:19
【问题描述】:

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

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

$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。我知道我们可以拿到身份证但是 我们也得到了完整的行吗?

任何帮助将不胜感激。

【问题讨论】:

标签: php pdo


【解决方案1】:

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

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

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

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

【讨论】:

  • 感谢@webbiedave 的回复.. 是的,我可以手动构建它.. 但问题是我已经在大量页面中这样做了.. 是的,我正在使用 MySQL .. 我是不知道我们如何才能得到带有问号填充值的执行查询
猜你喜欢
  • 2011-12-04
  • 1970-01-01
  • 1970-01-01
  • 2022-06-15
  • 1970-01-01
  • 1970-01-01
  • 2012-06-17
  • 2019-05-19
相关资源
最近更新 更多