在第一次开发PHP应用程序(MySQl,但使用ODBC接口以支持将来的扩展)时,我只是将我的SQL分配给一个变量并调用odbc_exec()。
这使得调试变得很简单,因为我只需要检查变量$sql。
当然,我很快就意识到我必须使用准备好的语句来清理用户输入。
我的问题是如何发现数据库中正在执行的确切SQL,以便调试我的预准备语句。
我意识到我不能在PHP中做到这一点,但是他们有没有什么外部监控工具可以用来访问SQL呢?或者甚至是MySql命令来回显,如果我让控制台窗口打开的话?
发布于 2011-10-18 11:29:02
使用MySQL query log。
发布于 2011-10-18 11:30:47
您可以通过--log[=file_name]启动mysql服务器来创建日志文件。
发布于 2011-10-19 10:44:10
下面是我用来帮助在PHP代码中进行调试的一些代码。
然而,为了绝对确定MySql正在执行的是什么,其他帖子是正确的。查看查询日志。
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);https://stackoverflow.com/questions/7802073
复制相似问题