在PHP中,当使用带有参数化查询的PDO访问MySQL数据库时,如何检查最终查询(在替换所有令牌之后)?
有没有办法检查数据库真正执行的是什么?
由于自PHP 5.3.0以来不推荐使用POSIX正则表达式(ereg),因此我想知道将旧表达式转换为PCRE(Perl兼容正则表达式)(preg)的简单方法.
每个例子,我有这个正则表达式:
eregi('^hello world');
Run Code Online (Sandbox Code Playgroud)
如何将表达式转换为preg_match兼容表达式?
注意:此帖子用作与从ereg转换为preg相关的所有帖子的占位符,以及相关问题的重复选项.请不要关闭这个问题.
有关:
有没有办法在预准备语句上调用PDOStatement :: execute()时获取原始SQL字符串?出于调试目的,这将非常有用.
可能重复:
从PDO预处理语句中检索(或模拟)完整查询
我无法弄清楚为什么我的查询返回0行..它实现了一些非常动态的搜索功能,以及很多if/loop语句等等.为了调试它,我想确切地看到正在发送什么字符串到服务器.有没有办法通过PHP做到这一点?
有没有办法让服务器询问"最后一个查询是什么",或者告诉PDO"告诉我你发送了什么"?
我看到一个响应使用str_replace手动输入值代替:fieldValue,但它可能是一个语法问题(或者它可能是一个不正确的循环等),这种方法没有帮助.
使用bindValue(":fieldValue", $value);if如果有所作为.
编辑
事实证明if ($var="true") { ...这应该是一个简单的事情if ($var=="true") { ....我认为PHP在这个意义上与Java不一样吗?无论哪种方式,问题仍然存在(因为我经常遇到这个问题).我不得不使用一系列echo "You are Here";来查找此错误,因为它在技术上有效但不正确.如果我有最后的SQL语句,我可以看到"哦,我的代码添加了where column = true,必须经历错误的IF ...".
在这样的代码之后:
$stmt = $mysqli->prepare("SELECT District FROM City WHERE Name=?")) {
$stmt->bind_param("s", $city);
$stmt->execute();
$stmt->bind_result($district);
$stmt->fetch();
printf("%s is in district %s\n", $city, $district);
Run Code Online (Sandbox Code Playgroud)
如何查看实际执行的SQL语句?
(它应该看起来像“SELECT District FROM City WHERE Name='Simi Valley';”)
我已经意识到,在这种简单的情况下,简单地重建查询将非常容易……但是我如何以通用方式访问它,以适用于非常复杂的准备好的语句,以及我不一定已经理解的情况查询的预期结构等。是否有一些函数或方法可以在绑定后返回 SQL 查询的实际文本的语句对象上调用?
mysql ×5
php ×5
pdo ×3
debugging ×1
ereg ×1
logging ×1
mysqli ×1
pcre ×1
pdostatement ×1
preg-match ×1
preg-replace ×1
sql ×1