/** * Outputs DB query debug information to the stream. * * @param string $query SQL query. * @param string $types SQL types string. * @param array $params List of SQL query parameters. */ public static function showQueryDebugInfo($query = "", $types = "", array $params = array()) { OutputStream::start(); if (!empty($query)) { if (empty($types) && empty($params)) { OutputStream::message(OutputStream::MSG_INFO, "Q: " . $query); } else { if (strlen($types) === count($params)) { $query = preg_replace('/\\s+/', ' ', $query); $preparedQuery = $query; $paramsStr = array(); for ($i = 0; $i < strlen($types); $i++) { $query = preg_replace("/\\?/", DBField::sqlValue($types[$i], $params[$i]), $query, 1); $paramsStr[] = $types[$i] . ": " . DBField::sqlValue($types[$i], $params[$i]); } OutputStream::message(OutputStream::MSG_INFO, "Q: " . $query); OutputStream::message(OutputStream::MSG_INFO, "P: " . $preparedQuery); OutputStream::message(OutputStream::MSG_INFO, "A: [" . implode(", ", $paramsStr) . "]"); } else { OutputStream::message(OutputStream::MSG_ERROR, "Number of types is not equal parameters number."); OutputStream::message(OutputStream::MSG_INFO, "T: " . $types); OutputStream::message(OutputStream::MSG_INFO, "A: [" . implode(", ", $params) . "]"); } } } else { OutputStream::message(OutputStream::MSG_WARNING, "DB query is empty."); } OutputStream::close(); }