首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何监控SQL (使用预置状态)?

如何监控SQL (使用预置状态)?
EN

Stack Overflow用户
提问于 2011-10-18 11:26:13
回答 3查看 479关注 0票数 0

在第一次开发PHP应用程序(MySQl,但使用ODBC接口以支持将来的扩展)时,我只是将我的SQL分配给一个变量并调用odbc_exec()

这使得调试变得很简单,因为我只需要检查变量$sql

当然,我很快就意识到我必须使用准备好的语句来清理用户输入。

我的问题是如何发现数据库中正在执行的确切SQL,以便调试我的预准备语句。

我意识到我不能在PHP中做到这一点,但是他们有没有什么外部监控工具可以用来访问SQL呢?或者甚至是MySql命令来回显,如果我让控制台窗口打开的话?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2011-10-18 11:29:02

使用MySQL query log

票数 1
EN

Stack Overflow用户

发布于 2011-10-18 11:30:47

您可以通过--log[=file_name]启动mysql服务器来创建日志文件。

票数 1
EN

Stack Overflow用户

发布于 2011-10-19 10:44:10

下面是我用来帮助在PHP代码中进行调试的一些代码。

然而,为了绝对确定MySql正在执行的是什么,其他帖子是正确的。查看查询日志。

代码语言:javascript
复制
function OdbcPrepareAndExecute($sql, $parameter_array)
{
   if (substr_count($sql, '?') != count($parameter_array))
   {
      ob_start();
      var_dump($parameter_array);
      $parameter_array_dump .= ob_get_clean();

      ReportErrorAndDie('Invalid parameters', 
                        'Request to prepare ODBC statement "' . $sql .'" with ' .
                        substr_count($sql, '?') . ' place-holders, but ' . 
                        count($parameter_array) . ' parameters in array : ' .
                        $parameter_array_dump
                       );
   }


   LogDatabaseActivity('Prepare SQL "' . $sql . '"');

   $prepared_statement = @odbc_prepare($_SESSION['connection'], $sql);
   if($prepared_statement === False) 
   {
      ReportErrorAndDie('Database problem', 
                        'Could not prepare ODBC statement "' . $sql .'"');
   }

   LogDatabaseActivity('Execute prepared SQL statement with the following parameters:');
   ob_start();
   var_dump($parameter_array);
   $parameter_array_dump = ob_get_clean();
   LogDatabaseActivity($parameter_array_dump);

   $expanded_sql = $sql;
   for ($i = 0; $i < count($parameter_array); $i++)
   $expanded_sql = substr_replace($expanded_sql, 
                                  $parameter_array[$i], 
                                  strpos($expanded_sql, '?'), 
                                  1);

   LogDatabaseActivity('(preapred statement expands to "' . $expanded_sql . '")');

   $result = @odbc_execute($prepared_statement, $parameter_array);
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7802073

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档