当前位置: 首页 > 面试题库 >

在带有PDO的PHP中,如何检查最终的SQL参数化查询?[重复]

滑畅
2023-03-14
问题内容

这个问题已经在这里有了答案

从PDO准备好的语句中获取原始SQL查询字符串 (16个答案)

3年前关闭。

在PHP中,当使用带有参数化查询的PDO访问MySQL数据库时,如何检查最终查询(在替换了所有令牌之后)?

有没有办法检查数据库真正执行了什么?


问题答案:

因此,我想我将最终回答我自己的问题,以便为记录提供完整的解决方案。但是必须感谢本·詹姆斯和凯拉什·巴杜,他们为此提供了线索。

简短回答
正如本·詹姆斯所说:
完整的SQL查询在PHP端不存在,因为令牌查询和参数分别发送到数据库。仅在数据库方面,存在完整查询。

即使试图在PHP端创建一个用于替换令牌的函数,也不能保证替换过程与SQL相同(如令牌类型,bindValue与bindParam等复杂的东西,…)

解决方法
这是我详细介绍Kailash
Badu的答案的地方。通过记录所有SQL查询,我们可以看到服务器上实际运行的内容。使用mySQL,可以通过更新my.cnf(或Wamp服务器中的my.ini)并添加如下一行来完成:

log=[REPLACE_BY_PATH]/[REPLACE_BY_FILE_NAME]

只是不要在生产中运行它!!!



 类似资料:
  • 问题内容: 我正在尝试测试将参数传递给sql.DB.Query方法的行为(使用database / sql包和github.com/lib/pq上的PostgreSQL驱动程序)。处理原始查询字符串以查看如何插入参数后,是否有任何方法可以获取原始查询字符串?例如,我正在考虑编写一个准备好的查询,然后检查结果语句。有任何想法吗?谢谢! 问题答案: 它看起来不像在查询本身中插入参数。它发送查询,然后等

  • 问题内容: 本质上,我有一个必须在SQL查询中多次调用的值。因此,是否可以在语句中重用相同的命名占位符,例如 ,然后简单地执行bindValue(“:Param”),并为两个:Params设置值? 问题答案: PDO ::prepare指出“您不能在准备好的语句中两次使用相同名称的命名参数标记”,所以我想那是不可以的。

  • 问题内容: 我正在学习如何在Excel驱动的SQL查询中使用参数(实际上,我仍在学习SQL),我想更进一步,并在Excel中提供一个参数来过滤结果。 这是我的查询: 我需要做的是允许团队中的人在excel工作表中运行此查询,并在第二个JOIN中为“ GROUP_NAME”提供其组名。不幸的是,我无法使用语法(在此处找到),因为我需要从MODULE_FUNCTION表中提取所有结果,并且仅在提供的组

  • 问题内容: 我问这个问题有点傻,因为我似乎是世界上唯一一个不了解这个问题的人,但是无论如何,这都是可行的。我将以Python为例。当我使用原始SQL查询(通常使用ORM)时,我会使用参数化,例如使用SQLite的以下示例: 方法A: 我知道这可行,我知道这是通常推荐的方式。SQL注入易受攻击的方式可以执行以下操作: 方法B: 到目前为止,我可以告诉我了解SQL注入,如本Wikipedia文章中所述

  • 我想在Select&Create table语句中向查询提供运行时值。参数化Athena SQL查询的方法有哪些?我尝试了从Presto中使用和语句,但它在Athena控制台中不起作用。我们需要任何像Python这样的外部脚本来调用它吗?

  • 问题内容: 我一直在试图弄清楚为什么以下代码未在我的ResultSet中生成任何数据: 另一方面,以下各项可以正常运行: SCHOOL的数据类型为CHAR(9字节)。除了setString,我还尝试了: 我完全留意接下来要研究什么;Eclipse调试器说,即使在setString或setCharacterStream之后,SQL查询也不会更改。我不确定这是因为设置参数不起作用,还是调试器根本无法在