本文整理匯總了PHP中Profiler::queryClone方法的典型用法代碼示例。如果您正苦於以下問題:PHP Profiler::queryClone方法的具體用法?PHP Profiler::queryClone怎麽用?PHP Profiler::queryClone使用的例子?那麽, 這裏精選的方法代碼示例或許可以為您提供幫助。您也可以進一步了解該方法所在類Profiler
的用法示例。
在下文中一共展示了Profiler::queryClone方法的1個代碼示例,這些例子默認根據受歡迎程度排序。您可以為喜歡或者感覺有用的代碼點讚,您的評價將有助於係統推薦出更棒的PHP代碼示例。
示例1: queryBind
/**
* Special handling for mysqli query().
*
* @param string|Select $sql The SQL statement with placeholders.
* @param array $bind An array of data to bind to the placeholders.
* @return \mysqli_result
* @throws \mysqli_sql_exception.
*/
public function queryBind($sql, $bind = array())
{
//try {省略throw-catch-rethrow塊,直接拋出\mysqli_sql_exception
// connect to the database if needed
if (!$this->_isConnected) {
$this->_connect();
}
// make sure $bind to an array;
// don't use (array) typecasting because
// because $bind may be a Expr object
if (!is_array($bind)) {
$bind = array($bind);
}
//將結果緩衝當中的結果集讀出來
$this->flushQueue();
$stmt = parent::stmt_init();
// TODO 以後可以派生mysqli_stmt
$stmt->prepare($sql);
if ($stmt === false) {
throw new Exception('Failed in preparing SQL: ' . $sql);
}
if (!empty($bind)) {
$types = '';
foreach ($bind as $val) {
switch (gettype($val)) {
case 'string':
$types .= 's';
break;
case 'integer':
$types .= 'i';
break;
case 'double':
$types .= 'd';
break;
case 'boolean':
case 'object':
case 'array':
case 'resource':
case 'NULL':
case "unknown type":
default:
$types .= 's';
}
}
$stmt->bind_param($types, $bind);
}
// 由於取消了Statement,因此將Profiler的控製代碼移動到這裏
// 由於所處的程序位置,省略了$qp->start(),簡化了$qp->bindParams()的相關代碼
if ($this->_profiler === false) {
$stmt->execute();
$result = $stmt->get_result();
} else {
$q = $this->_profiler->queryStart($sql);
$qp = $this->_profiler->getQueryProfile($q);
if ($qp->hasEnded()) {
$q = $this->_profiler->queryClone($qp);
$qp = $this->_profiler->getQueryProfile($q);
}
$qp->bindParams($bind);
$stmt->execute();
$result = $stmt->get_result();
$this->_profiler->queryEnd($q);
}
return $result;
}