Ulf Wendel

PHP: 62 characters to see all MySQL queries

Did you ever want to see the database queries an arbitrary PHP MySQL application runs? It takes two free downloads and 62 characters to see them.

  • Get PHP 5.3.4-dev
  • Get PECL/mysqlnd_qc
  • Add 19 characters to your configure line: --enable-mysqlnd-qc
  • Add 43 characters at the end of applications source, e.g. using the auto_append_file configuration setting: var_dump(mysqlnd_qc_get_query_trace_log());
  • Start your query analysis


array(329) {
  [0]=>
  array(8) {
    ["query"]=>
    string(27) "SET @@session.sql_mode = """
    ["origin"]=>
    string(1330) "#0 /home/nixnutz/Downloads/oxid/core/adodblite/adodbSQL_drivers/mysql/mysql_driver.inc(352): mysql_query('SET @@session.s...', Resource id #26)
#1 /home/nixnutz/Downloads/oxid/core/adodblite/adodb.inc.php(316): mysql_driver_ADOConnection->do_query('SET @@session.s...', -1, -1, false)
#2 /home/nixnutz/Downloads/oxid/core/oxdb.php(216): ADOConnection->Execute('SET @@session.s...')
#3 /home/nixnutz/Downloads/oxid/core/oxconfig.php(479): oxDb::getDb()
#4 /home/nixnutz/Downloads/oxid/core/oxconfig.php(406): oxConfig->_loadVarsFromDb('oxbaseshop')
#5 /home/nixnutz/Downloads/oxid/core/oxconfig.php(448): oxConfig->init()
#6 /home/nixnutz/Downloads/oxid/core/oxsupercfg.php(115): oxConfig::getInstance()
#7 /home/nixnutz/Downloads/oxid/core/oxutilsobject.php(207): oxSuperCfg->getConfig()
#8 /home/nixnutz/Downloads/oxid/core/oxutilsobject.php(109): oxUtilsObject->getClassName('oxutilsobject')
#9 /home/nixnutz/Downloads/oxid/core/oxutilsobject.php(74): oxUtilsObject->oxNew('oxUtilsObject')
#10 /home/nixnutz/Downloads/oxid/core/oxfunctions.php(284): oxUtilsObject::getInstance()
#11 /home/nixnutz/Downloads/oxid/core/oxutils.php(101): oxNew('oxUtils')
#12 /home/nixnutz/Downloads/oxid/core/oxfunctions.php(448): oxUtils::getInstance()
#13 /home/nixnutz/Downloads/oxid/index.php(72): require_once('/home/nixnutz/D...')
#14 {main}"
    ["run_time"]=>
    int(0)
    ["store_time"]=>
    int(0)
    ["eligible_for_caching"]=>
    bool(false)
    ["no_table"]=>
    bool(false)
    ["was_added"]=>
    bool(false)
    ["was_already_in_cache"]=>
    bool(false)
  }
...
}

If you want to know more, check this presentation.

3 Comments

  1. Should I use auto_prepend_file or auto_append_file ?
    or both are ok ?

  2. Huarong,

    the PHP manual will tell you!

    auto_prepend_files are called before your main PHP application starts. Because your main PHP application has not been started yet, you will not see any queries. auto_append_files are being executed after your main PHP application has been run.

    Ulf

  3. Uuuups, Huarong,

    thanks for the hint which I did not understand first! I have corrected the blog post. Of course it should read auto_append_file in my blog post!

    Thanks again!
    Ulf