public function execute($sql, $dblink, $bQuerySlave, $sServer) { global $db; if (count($this->commands) >= 1000) { $this->cancel = true; return mysql_query($sql, $dblink); } $command = array(); $command['sql'] = $sql; $command['explain'] = array(); $command['result'] = array(); $command['warnings'] = array(); $command['runtime'] = 0; $command['affected'] = 0; $command['count'] = -1; $command['mode'] = $db['mode']; $command['slave'] = $bQuerySlave; $command['server'] = $sServer; $command['dblink'] = '' . $dblink; $bUseExplain = false; $sql = trim($sql); $sqlexplain = $sql; if (strtoupper(substr($sqlexplain, 0, 7)) == 'DELETE ') { $sqlexplain = $this->strip_from($sqlexplain); } elseif (strtoupper(substr($sqlexplain, 0, 12)) == 'INSERT INTO ' || strtoupper(substr($sqlexplain, 0, 19)) == 'INSERT IGNORE INTO ') { $sqlexplain = $this->strip_temptable($sqlexplain); } elseif (strtoupper(substr($sqlexplain, 0, 23)) == 'CREATE TEMPORARY TABLE ') { $sqlexplain = $this->strip_temptable($sqlexplain); } if (strtoupper(substr($sqlexplain, 0, 7)) == 'SELECT ') { // we can use EXPLAIN $c = 0; $rs = mysql_query($sqlexplain, $dblink); $command['count'] = sql_num_rows($rs); while ($r = sql_fetch_assoc($rs)) { if ($c == 25) { break; } $command['result'][] = $r; $c++; } sql_free_result($rs); $rs = mysql_query('EXPLAIN EXTENDED ' . $sqlexplain, $dblink); while ($r = sql_fetch_assoc($rs)) { $command['explain'][] = $r; } sql_free_result($rs); } // dont use query cache! $sql = $this->insert_nocache($sql); $bSqlExecution = new CBench(); $bSqlExecution->start(); $rsResult = mysql_query($sql, $dblink); $bSqlExecution->stop(); $bError = $rsResult == false; $command['affected'] = mysql_affected_rows($dblink); $rs = mysql_query('SHOW WARNINGS', $dblink); while ($r = sql_fetch_assoc($rs)) { $command['warnings'][] = $r['Message']; } $command['runtime'] = $bSqlExecution->Diff(); $this->commands[] = $command; return $rsResult; }
function sqldbg_execute($sql, $bSlave) { global $dblink; global $sqldbg_cmdNo; global $sqldbg_sumTimes; $sqldbg_cmdNo++; echo '<p class="sqlno"><span class="white">/*</span> SQL command ' . $sqldbg_cmdNo . ' '; if ($bSlave) { echo '<span class="slave_title">(slave)</span>'; } echo '<span class="white">*/</span>'; echo '</p>'; echo '<p class="sqlcommand">'; if ($bSlave) { echo '<span class="slave_sql">'; } echo htmlspecialchars($sql, ENT_COMPAT, 'UTF-8'); if ($bSlave) { echo '</span>'; } echo ' ;</p>'; echo '<div class="comments"><div class="white">/*</div><br>'; // Explains $bUseExplain = true; $sqlexplain = $sql; $usebr = false; if (mb_strtoupper(mb_substr($sqlexplain, 0, 6)) == 'ALTER ') { $bUseExplain = false; } else { if (mb_strtoupper(mb_substr($sqlexplain, 0, 7)) == 'DELETE ') { $sqlexplain = sqldbg_strip_from($sqlexplain); } else { if (mb_strtoupper(mb_substr($sqlexplain, 0, 12)) == 'INSERT INTO ' || mb_strtoupper(mb_substr($sqlexplain, 0, 19)) == 'INSERT IGNORE INTO ') { $sqlexplain = sqldbg_strip_temptable($sqlexplain); if ($sqlexplain == '') { $bUseExplain = false; } } else { if (mb_strtoupper(mb_substr($sqlexplain, 0, 7)) == 'INSERT ') { $bUseExplain = false; } else { if (mb_strtoupper(mb_substr($sqlexplain, 0, 7)) == 'UPDATE ') { $bUseExplain = false; } else { if (mb_strtoupper(mb_substr($sqlexplain, 0, 11)) == 'DROP TABLE ') { $bUseExplain = false; } else { if (mb_strtoupper(mb_substr($sqlexplain, 0, 23)) == 'CREATE TEMPORARY TABLE ') { $sqlexplain = sqldbg_strip_temptable($sqlexplain); if ($sqlexplain == '') { $bUseExplain = false; } } } } } } } } if ($bUseExplain == true) { $bFirstLine = true; $nLine = 0; $rs = mysql_query($sqlexplain, $dblink); echo '<div class="selrows">Number of selected rows: ' . mysql_num_rows($rs) . '</div>'; echo '<table class="firstresultrow" border="1">'; while ($r = sql_fetch_assoc($rs)) { $usebr = true; $nLine++; if ($bFirstLine == true) { echo '<tr>' . "\n"; foreach ($r as $field => $value) { echo '<th>' . htmlspecialchars($field, ENT_COMPAT, 'UTF-8') . '</th>' . "\n"; } echo '</tr>' . "\n"; } if ($bFirstLine) { echo '<tr>'; } else { echo '<tr class="result">'; } foreach ($r as $value) { echo '<td>' . htmlspecialchars($value != null ? $value : 'NULL', ENT_COMPAT, 'UTF-8') . '</td>'; } echo '</tr>' . "\n"; if ($nLine == 25) { break; } $bFirstLine = false; } echo '</table>'; mysql_free_result($rs); echo '<table class="explain" border="1">'; $bFirstLine = true; $rs = mysql_query('EXPLAIN EXTENDED ' . $sqlexplain); while ($r = sql_fetch_assoc($rs)) { if ($bFirstLine == true) { echo '<tr>'; foreach ($r as $field => $value) { echo '<th>' . htmlspecialchars($field, ENT_COMPAT, 'UTF-8') . '</th>'; } echo '</tr>' . "\n"; $bFirstLine = false; } echo '<tr>'; foreach ($r as $value) { echo '<td>' . htmlspecialchars($value != null ? mb_ereg_replace('\\*/', '* /', $value) : 'NULL', ENT_COMPAT, 'UTF-8') . '</td>'; } echo '</tr>' . "\n"; } echo '</table>'; $usebr = true; } // dont use query cache! $sql = sqldbg_insert_nocache($sql); $bSqlExecution = new CBench(); $bSqlExecution->start(); $rsResult = mysql_query($sql, $dblink); $bError = $rsResult == false; $bSqlExecution->stop(); $sqldbg_sumTimes += $bSqlExecution->Diff(); if ($bError == true) { echo '<div class="error">Error while executing SQL command!</div>'; echo '<div class="errormsg">'; echo '<table>'; $rs = mysql_query('SHOW WARNINGS', $dblink); while ($r = sql_fetch_assoc($rs)) { echo '<tr><td>' . htmlspecialchars($r['Message'], ENT_COMPAT, 'UTF-8') . '</td></tr>'; } echo '</table>'; echo '</div>'; } echo '<div class="runtime">Runtime: ' . sprintf('%01.5f', $bSqlExecution->Diff()) . ' sek.</div>'; echo '<div class="affectedrows">Number of affected rows: ' . mysql_affected_rows($dblink) . '</div>'; echo '<div class="white">*/</div></div>'; return $rsResult; }