如何查看准备好的 PDO SQL 语句 [重复]
Posted
技术标签:
【中文标题】如何查看准备好的 PDO SQL 语句 [重复]【英文标题】:How can I view a prepared PDO SQL Statement [duplicate] 【发布时间】:2012-06-24 18:15:06 【问题描述】:可能重复:PDO Prepared Statements
我确定这个问题的答案很简单,但我似乎找不到。
我正在使用 PDO(php 数据对象)对 mysql 数据库运行查询,并且发现在对 DB 执行之前显示准备好的查询很有用。
有没有办法做到这一点?例如:
$query = 'SELECT Id, Name, Comment FROM Users WHERE Id = :id';
$pdoStatement = $db->prepare($query);
$pdoStatement->bindValue(':id', $id);
// How can I view the actual statement that will be executed, showing the real
// value that will be used in place of ':id'
$pdoStatement->execute();
【问题讨论】:
这里讨论***.com/questions/2411182/…和***.com/questions/6961897/… 考虑到你们找到其他帖子的速度,我显然搜索得不太好。 @Bryan 这是右侧相关问题面板中的第一个! @lonesomeday 我在 Google 上进行了一些搜索,但没有产生任何有用的信息,然后只是发布了问题而没有检查相关问题。我的错。不过再次感谢。 debugDumpParams 是我猜的答案 【参考方案1】:您无法获取发送到服务器的查询,因为 PDO 不能以这种方式工作。
将$query和$id分别发送到服务器数据库,由数据库加入后执行。
【讨论】:
【参考方案2】:一种常见的做法是将查询(其中包含占位符)与绑定值一起打印。当使用:placeholder => value
样式的数组时,您可以只使用var_dump
、print_r
或var_export
数组。
例如,这是在 Magento SQL 调试中完成的。
“最终”查询不作为字符串存在,除非 PDO 驱动程序不支持准备好的语句并且它正在模拟它们。
本质上,您可以将准备好的语句视为存储函数或存储过程。您创建一次并使用多个参数多次执行它。
【讨论】:
【参考方案3】:使用它:
/**
* Replaces any parameter placeholders in a query with the value of that
* parameter. Useful for debugging. Assumes anonymous parameters from
* $params are are in the same order as specified in $query
*
* @param string $query The sql query with parameter placeholders
* @param array $params The array of substitution parameters
* @return string The interpolated query
*/
public static function interpolateQuery($query, $params)
$keys = array();
# build a regular expression for each parameter
foreach ($params as $key => $value)
if (is_string($key))
$keys[] = '/:'.$key.'/';
else
$keys[] = '/[?]/';
$query = preg_replace($keys, $params, $query, 1, $count);
#trigger_error('replaced '.$count.' keys');
return $query;
来源:View and debug prepared PDO query without looking at MySQL logs
【讨论】:
以上是关于如何查看准备好的 PDO SQL 语句 [重复]的主要内容,如果未能解决你的问题,请参考以下文章
在查询中使用 PDO 准备好的语句和 LIMIT 时出错 [重复]