本文整理汇总了PHP中MWDebug::query方法的典型用法代码示例。如果您正苦于以下问题:PHP MWDebug::query方法的具体用法?PHP MWDebug::query怎么用?PHP MWDebug::query使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类MWDebug
的用法示例。
在下文中一共展示了MWDebug::query方法的5个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的PHP代码示例。
示例1: query
/**
* Run an SQL query and return the result. Normally throws a DBQueryError
* on failure. If errors are ignored, returns false instead.
*
* In new code, the query wrappers select(), insert(), update(), delete(),
* etc. should be used where possible, since they give much better DBMS
* independence and automatically quote or validate user input in a variety
* of contexts. This function is generally only useful for queries which are
* explicitly DBMS-dependent and are unsupported by the query wrappers, such
* as CREATE TABLE.
*
* However, the query wrappers themselves should call this function.
*
* @param $sql String: SQL query
* @param $fname String: Name of the calling function, for profiling/SHOW PROCESSLIST
* comment (you can use __METHOD__ or add some extra info)
* @param $tempIgnore Boolean: Whether to avoid throwing an exception on errors...
* maybe best to catch the exception instead?
* @throws MWException
* @return boolean|ResultWrapper. true for a successful write query, ResultWrapper object
* for a successful read query, or false on failure if $tempIgnore set
*/
public function query( $sql, $fname = __METHOD__, $tempIgnore = false ) {
global $wgUser, $wgDebugDBTransactions;
$this->mLastQuery = $sql;
if ( !$this->mDoneWrites && $this->isWriteQuery( $sql ) ) {
# Set a flag indicating that writes have been done
wfDebug( __METHOD__ . ": Writes done: $sql\n" );
$this->mDoneWrites = true;
}
# Add a comment for easy SHOW PROCESSLIST interpretation
if ( is_object( $wgUser ) && $wgUser->isItemLoaded( 'name' ) ) {
$userName = $wgUser->getName();
if ( mb_strlen( $userName ) > 15 ) {
$userName = mb_substr( $userName, 0, 15 ) . '...';
}
$userName = str_replace( '/', '', $userName );
} else {
$userName = '';
}
// Add trace comment to the begin of the sql string, right after the operator.
// Or, for one-word queries (like "BEGIN" or COMMIT") add it to the end (bug 42598)
$commentedSql = preg_replace( '/\s|$/', " /* $fname $userName */ ", $sql, 1 );
# If DBO_TRX is set, start a transaction
if ( ( $this->mFlags & DBO_TRX ) && !$this->mTrxLevel &&
$sql != 'BEGIN' && $sql != 'COMMIT' && $sql != 'ROLLBACK' )
{
# Avoid establishing transactions for SHOW and SET statements too -
# that would delay transaction initializations to once connection
# is really used by application
$sqlstart = substr( $sql, 0, 10 ); // very much worth it, benchmark certified(tm)
if ( strpos( $sqlstart, "SHOW " ) !== 0 && strpos( $sqlstart, "SET " ) !== 0 ) {
if ( $wgDebugDBTransactions ) {
wfDebug( "Implicit transaction start.\n" );
}
$this->begin( __METHOD__ . " ($fname)" );
$this->mTrxAutomatic = true;
}
}
# Keep track of whether the transaction has write queries pending
if ( $this->mTrxLevel && !$this->mTrxDoneWrites && $this->isWriteQuery( $sql ) ) {
$this->mTrxDoneWrites = true;
Profiler::instance()->transactionWritingIn( $this->mServer, $this->mDBname );
}
$isMaster = !is_null( $this->getLBInfo( 'master' ) );
if ( !Profiler::instance()->isStub() ) {
# generalizeSQL will probably cut down the query to reasonable
# logging size most of the time. The substr is really just a sanity check.
if ( $isMaster ) {
$queryProf = 'query-m: ' . substr( DatabaseBase::generalizeSQL( $sql ), 0, 255 );
$totalProf = 'DatabaseBase::query-master';
} else {
$queryProf = 'query: ' . substr( DatabaseBase::generalizeSQL( $sql ), 0, 255 );
$totalProf = 'DatabaseBase::query';
}
wfProfileIn( $totalProf );
wfProfileIn( $queryProf );
}
if ( $this->debug() ) {
static $cnt = 0;
$cnt++;
$sqlx = substr( $commentedSql, 0, 500 );
$sqlx = strtr( $sqlx, "\t\n", ' ' );
$master = $isMaster ? 'master' : 'slave';
wfDebug( "Query {$this->mDBname} ($cnt) ($master): $sqlx\n" );
}
$queryId = MWDebug::query( $sql, $fname, $isMaster );
# Do the query and handle errors
$ret = $this->doQuery( $commentedSql );
//.........这里部分代码省略.........
示例2: query
/**
* Run an SQL query and return the result. Normally throws a DBQueryError
* on failure. If errors are ignored, returns false instead.
*
* In new code, the query wrappers select(), insert(), update(), delete(),
* etc. should be used where possible, since they give much better DBMS
* independence and automatically quote or validate user input in a variety
* of contexts. This function is generally only useful for queries which are
* explicitly DBMS-dependent and are unsupported by the query wrappers, such
* as CREATE TABLE.
*
* However, the query wrappers themselves should call this function.
*
* @param string $sql SQL query
* @param string $fname Name of the calling function, for profiling/SHOW PROCESSLIST
* comment (you can use __METHOD__ or add some extra info)
* @param bool $tempIgnore Whether to avoid throwing an exception on errors...
* maybe best to catch the exception instead?
* @throws MWException
* @return bool|ResultWrapper True for a successful write query, ResultWrapper object
* for a successful read query, or false on failure if $tempIgnore set
*/
public function query($sql, $fname = __METHOD__, $tempIgnore = false)
{
global $wgUser;
$this->mLastQuery = $sql;
$isWriteQuery = $this->isWriteQuery($sql);
if ($isWriteQuery) {
$reason = $this->getReadOnlyReason();
if ($reason !== false) {
throw new DBReadOnlyError($this, "Database is read-only: {$reason}");
}
# Set a flag indicating that writes have been done
$this->mDoneWrites = microtime(true);
}
# Add a comment for easy SHOW PROCESSLIST interpretation
if (is_object($wgUser) && $wgUser->isItemLoaded('name')) {
$userName = $wgUser->getName();
if (mb_strlen($userName) > 15) {
$userName = mb_substr($userName, 0, 15) . '...';
}
$userName = str_replace('/', '', $userName);
} else {
$userName = '';
}
// Add trace comment to the begin of the sql string, right after the operator.
// Or, for one-word queries (like "BEGIN" or COMMIT") add it to the end (bug 42598)
$commentedSql = preg_replace('/\\s|$/', " /* {$fname} {$userName} */ ", $sql, 1);
if (!$this->mTrxLevel && $this->getFlag(DBO_TRX) && $this->isTransactableQuery($sql)) {
$this->begin(__METHOD__ . " ({$fname})");
$this->mTrxAutomatic = true;
}
# Keep track of whether the transaction has write queries pending
if ($this->mTrxLevel && !$this->mTrxDoneWrites && $isWriteQuery) {
$this->mTrxDoneWrites = true;
$this->getTransactionProfiler()->transactionWritingIn($this->mServer, $this->mDBname, $this->mTrxShortId);
}
$isMaster = !is_null($this->getLBInfo('master'));
# generalizeSQL will probably cut down the query to reasonable
# logging size most of the time. The substr is really just a sanity check.
if ($isMaster) {
$queryProf = 'query-m: ' . substr(DatabaseBase::generalizeSQL($sql), 0, 255);
$totalProf = 'DatabaseBase::query-master';
} else {
$queryProf = 'query: ' . substr(DatabaseBase::generalizeSQL($sql), 0, 255);
$totalProf = 'DatabaseBase::query';
}
# Include query transaction state
$queryProf .= $this->mTrxShortId ? " [TRX#{$this->mTrxShortId}]" : "";
$profiler = Profiler::instance();
if (!$profiler instanceof ProfilerStub) {
$totalProfSection = $profiler->scopedProfileIn($totalProf);
$queryProfSection = $profiler->scopedProfileIn($queryProf);
}
if ($this->debug()) {
wfDebugLog('queries', sprintf("%s: %s", $this->mDBname, $sql));
}
$queryId = MWDebug::query($sql, $fname, $isMaster);
# Avoid fatals if close() was called
$this->assertOpen();
# Do the query and handle errors
$startTime = microtime(true);
$ret = $this->doQuery($commentedSql);
$queryRuntime = microtime(true) - $startTime;
# Log the query time and feed it into the DB trx profiler
$this->getTransactionProfiler()->recordQueryCompletion($queryProf, $startTime, $isWriteQuery, $this->affectedRows());
MWDebug::queryTime($queryId);
# Try reconnecting if the connection was lost
if (false === $ret && $this->wasErrorReissuable()) {
# Transaction is gone, like it or not
$hadTrx = $this->mTrxLevel;
// possible lost transaction
$this->mTrxLevel = 0;
$this->mTrxIdleCallbacks = array();
// bug 65263
$this->mTrxPreCommitCallbacks = array();
// bug 65263
wfDebug("Connection lost, reconnecting...\n");
# Stash the last error values since ping() might clear them
$lastError = $this->lastError();
//.........这里部分代码省略.........
示例3: query
/**
* Run an SQL query and return the result. Normally throws a DBQueryError
* on failure. If errors are ignored, returns false instead.
*
* In new code, the query wrappers select(), insert(), update(), delete(),
* etc. should be used where possible, since they give much better DBMS
* independence and automatically quote or validate user input in a variety
* of contexts. This function is generally only useful for queries which are
* explicitly DBMS-dependent and are unsupported by the query wrappers, such
* as CREATE TABLE.
*
* However, the query wrappers themselves should call this function.
*
* @param $sql String: SQL query
* @param $fname String: Name of the calling function, for profiling/SHOW PROCESSLIST
* comment (you can use __METHOD__ or add some extra info)
* @param $tempIgnore Boolean: Whether to avoid throwing an exception on errors...
* maybe best to catch the exception instead?
* @return boolean|ResultWrapper. true for a successful write query, ResultWrapper object
* for a successful read query, or false on failure if $tempIgnore set
* @throws DBQueryError Thrown when the database returns an error of any kind
*/
public function query($sql, $fname = '', $tempIgnore = false)
{
$isMaster = !is_null($this->getLBInfo('master'));
if (!Profiler::instance()->isStub()) {
# generalizeSQL will probably cut down the query to reasonable
# logging size most of the time. The substr is really just a sanity check.
if ($isMaster) {
$queryProf = 'query-m: ' . substr(DatabaseBase::generalizeSQL($sql), 0, 255);
$totalProf = 'DatabaseBase::query-master';
} else {
$queryProf = 'query: ' . substr(DatabaseBase::generalizeSQL($sql), 0, 255);
$totalProf = 'DatabaseBase::query';
}
wfProfileIn($totalProf);
wfProfileIn($queryProf);
}
$this->mLastQuery = $sql;
if (!$this->mDoneWrites && $this->isWriteQuery($sql)) {
# Set a flag indicating that writes have been done
wfDebug(__METHOD__ . ": Writes done: {$sql}\n");
$this->mDoneWrites = true;
}
# Add a comment for easy SHOW PROCESSLIST interpretation
global $wgUser;
if (is_object($wgUser) && $wgUser->isItemLoaded('name')) {
$userName = $wgUser->getName();
if (mb_strlen($userName) > 15) {
$userName = mb_substr($userName, 0, 15) . '...';
}
$userName = str_replace('/', '', $userName);
} else {
$userName = '';
}
$commentedSql = preg_replace('/\\s/', " /* {$fname} {$userName} */ ", $sql, 1);
# If DBO_TRX is set, start a transaction
if ($this->mFlags & DBO_TRX && !$this->trxLevel() && $sql != 'BEGIN' && $sql != 'COMMIT' && $sql != 'ROLLBACK') {
# avoid establishing transactions for SHOW and SET statements too -
# that would delay transaction initializations to once connection
# is really used by application
$sqlstart = substr($sql, 0, 10);
// very much worth it, benchmark certified(tm)
if (strpos($sqlstart, "SHOW ") !== 0 && strpos($sqlstart, "SET ") !== 0) {
$this->begin(__METHOD__ . " ({$fname})");
}
}
if ($this->debug()) {
static $cnt = 0;
$cnt++;
$sqlx = substr($commentedSql, 0, 500);
$sqlx = strtr($sqlx, "\t\n", ' ');
$master = $isMaster ? 'master' : 'slave';
wfDebug("Query {$this->mDBname} ({$cnt}) ({$master}): {$sqlx}\n");
}
if (istainted($sql) & TC_MYSQL) {
throw new MWException('Tainted query found');
}
$queryId = MWDebug::query($sql, $fname, $isMaster);
# Do the query and handle errors
$ret = $this->doQuery($commentedSql);
MWDebug::queryTime($queryId);
# Try reconnecting if the connection was lost
if (false === $ret && $this->wasErrorReissuable()) {
# Transaction is gone, like it or not
$this->mTrxLevel = 0;
wfDebug("Connection lost, reconnecting...\n");
if ($this->ping()) {
wfDebug("Reconnected\n");
$sqlx = substr($commentedSql, 0, 500);
$sqlx = strtr($sqlx, "\t\n", ' ');
global $wgRequestTime;
$elapsed = round(microtime(true) - $wgRequestTime, 3);
if ($elapsed < 300) {
# Not a database error to lose a transaction after a minute or two
wfLogDBError("Connection lost and reconnected after {$elapsed}s, query: {$sqlx}\n");
}
$ret = $this->doQuery($commentedSql);
} else {
wfDebug("Failed\n");
//.........这里部分代码省略.........
示例4: query
/**
* Run an SQL query and return the result. Normally throws a DBQueryError
* on failure. If errors are ignored, returns false instead.
*
* In new code, the query wrappers select(), insert(), update(), delete(),
* etc. should be used where possible, since they give much better DBMS
* independence and automatically quote or validate user input in a variety
* of contexts. This function is generally only useful for queries which are
* explicitly DBMS-dependent and are unsupported by the query wrappers, such
* as CREATE TABLE.
*
* However, the query wrappers themselves should call this function.
*
* @param string $sql SQL query
* @param string $fname Name of the calling function, for profiling/SHOW PROCESSLIST
* comment (you can use __METHOD__ or add some extra info)
* @param bool $tempIgnore Whether to avoid throwing an exception on errors...
* maybe best to catch the exception instead?
* @throws MWException
* @return bool|ResultWrapper True for a successful write query, ResultWrapper object
* for a successful read query, or false on failure if $tempIgnore set
*/
public function query($sql, $fname = __METHOD__, $tempIgnore = false)
{
global $wgUser, $wgDebugDBTransactions, $wgDebugDumpSqlLength;
$this->mLastQuery = $sql;
if ($this->isWriteQuery($sql)) {
# Set a flag indicating that writes have been done
wfDebug(__METHOD__ . ': Writes done: ' . DatabaseBase::generalizeSQL($sql) . "\n");
$this->mDoneWrites = microtime(true);
}
# Add a comment for easy SHOW PROCESSLIST interpretation
if (is_object($wgUser) && $wgUser->isItemLoaded('name')) {
$userName = $wgUser->getName();
if (mb_strlen($userName) > 15) {
$userName = mb_substr($userName, 0, 15) . '...';
}
$userName = str_replace('/', '', $userName);
} else {
$userName = '';
}
// Add trace comment to the begin of the sql string, right after the operator.
// Or, for one-word queries (like "BEGIN" or COMMIT") add it to the end (bug 42598)
$commentedSql = preg_replace('/\\s|$/', " /* {$fname} {$userName} */ ", $sql, 1);
# If DBO_TRX is set, start a transaction
if ($this->mFlags & DBO_TRX && !$this->mTrxLevel && $sql != 'BEGIN' && $sql != 'COMMIT' && $sql != 'ROLLBACK') {
# Avoid establishing transactions for SHOW and SET statements too -
# that would delay transaction initializations to once connection
# is really used by application
$sqlstart = substr($sql, 0, 10);
// very much worth it, benchmark certified(tm)
if (strpos($sqlstart, "SHOW ") !== 0 && strpos($sqlstart, "SET ") !== 0) {
if ($wgDebugDBTransactions) {
wfDebug("Implicit transaction start.\n");
}
$this->begin(__METHOD__ . " ({$fname})");
$this->mTrxAutomatic = true;
}
}
# Keep track of whether the transaction has write queries pending
if ($this->mTrxLevel && !$this->mTrxDoneWrites && $this->isWriteQuery($sql)) {
$this->mTrxDoneWrites = true;
Profiler::instance()->transactionWritingIn($this->mServer, $this->mDBname, $this->mTrxShortId);
}
$queryProf = '';
$totalProf = '';
$isMaster = !is_null($this->getLBInfo('master'));
if (!Profiler::instance()->isStub()) {
# generalizeSQL will probably cut down the query to reasonable
# logging size most of the time. The substr is really just a sanity check.
if ($isMaster) {
$queryProf = 'query-m: ' . substr(DatabaseBase::generalizeSQL($sql), 0, 255);
$totalProf = 'DatabaseBase::query-master';
} else {
$queryProf = 'query: ' . substr(DatabaseBase::generalizeSQL($sql), 0, 255);
$totalProf = 'DatabaseBase::query';
}
# Include query transaction state
$queryProf .= $this->mTrxShortId ? " [TRX#{$this->mTrxShortId}]" : "";
$trx = $this->mTrxLevel ? 'TRX=yes' : 'TRX=no';
wfProfileIn($totalProf);
wfProfileIn($queryProf);
}
if ($this->debug()) {
static $cnt = 0;
$cnt++;
$sqlx = $wgDebugDumpSqlLength ? substr($commentedSql, 0, $wgDebugDumpSqlLength) : $commentedSql;
$sqlx = strtr($sqlx, "\t\n", ' ');
$master = $isMaster ? 'master' : 'slave';
wfDebug("Query {$this->mDBname} ({$cnt}) ({$master}): {$sqlx}\n");
}
$queryId = MWDebug::query($sql, $fname, $isMaster);
# Avoid fatals if close() was called
if (!$this->isOpen()) {
throw new DBUnexpectedError($this, "DB connection was already closed.");
}
# Do the query and handle errors
$ret = $this->doQuery($commentedSql);
MWDebug::queryTime($queryId);
# Try reconnecting if the connection was lost
//.........这里部分代码省略.........
示例5: executeAndProfileQuery
/**
* Execute and profile the query. This is a wrapper for capturing timing information
* while executing a query.
*
* @param string $sql the query
* @param string $fname the function name
* @param bool $isMaster is this against the master
*
* @return ResultWrapper|resource|bool see doQuery
*/
protected function executeAndProfileQuery($sql, $fname, $isMaster)
{
$queryId = MWDebug::query($sql, $fname, $isMaster);
$start = microtime(true);
// Wikia change: DatabaseMysql returns a resource instead of ResultWrapper instance
/* @var $ret resource|bool */
$ret = $this->doQuery($sql);
$this->logSql($sql, $ret, $fname, microtime(true) - $start, $isMaster);
MWDebug::queryTime($queryId);
return $ret;
}