脚本宝典收集整理的这篇文章主要介绍了php – 使用PDO执行时间记录查询 – 自动完成功能无效,脚本宝典觉得挺不错的,现在分享给大家,也给大家做个参考。
中级类名是Model.
从我的应用程序中,我有一个名为Users的类,它扩展了Model.
class Users extends Model { function __construct() { parent::__construct(); $stmt = $this->PRepare('SELECT * From users WHERE id=? '); $stmt->bindValue(1,1); //$stmt-> auto-complete is unavailable $stmt->execute(); $rows = $stmt->fetchAll(PDO::FETCH_ASSOC); print_r($rows); //i get results } }
我的Model类看起来像这样.
class Model extends PDO { public static $LOG = array(); private $query_cache = array(); public function __construct() { parent::__construct( "MysqL:dbname=".MysqL_DB.";host=".MysqL_HOST,MysqL_USER,MysqL_PASSWORD ); } public function query($query) { $time = ""; $query = MysqL_real_escaPE_string(preg_replace( '/\s+/',' ',$query )); if (key_exists($query,$this->query_cache) && is_object($this->query_cache[$query])) { $result = $this->query_cache[$query]; } else { $start = microtime(true); $result = parent::query($query); $time = microtime(true) - $start; $this->query_cache[$query] = $result; Logger::$logText['DATABASE'][] = array( 'QUERY' => $query,'TIME' => number_format($time,4) ); } return $result; } /** * @return LoggedPDOStatement */ public function prepare($query) { return new LoggedPDOStatement(parent::prepare($query)); } }
我的LoggedPDOStatement看起来像这样.
class LoggedPDOStatement { /** * The PDOStatement we decorate */ private $statement; public function __construct(PDOStatement $statement) { $this->statement = $statement; } /** * When execute is called record the time IT takes and * then log the query * @return PDO result set */ public function execute() { $start = microtime(true); $result = $this->statement->execute(); $time = microtime(true) - $start; Model::$log[] = array( 'query' => '[PS] ' . $this->statement->queryString,'time' => round($time * 1000,3) ); return $result; } /** * Other than execute pass all other calls to the PDOStatement object * @param string $function_name * @param array $parameters arguments */ public function __call($function_name,$parameters) { return call_user_func_array( array($this->statement,$function_name),$parameters ); } }
他们有更好的方法吗?
@Touki,我同意我不应该扩展PDO类.
@cillosis,感谢您的评论.
这就是我写课的方式.我还没有粘贴完整的代码,因为它尚未完成.但我检查它的工作原理.我也可以记录我的查询.但是我不确定我是否能够记录执行时间.
class Model { /** * The singleton instance * */ static private $PDOInstance; public function __construct($dsn="",$username = false,$password = false,$driver_options = false) { if (!self::$PDOInstance) { try { self::$PDOInstance = new PDO( "MysqL:dbname=".MysqL_DB.";host=".MysqL_HOST,MysqL_PASSWORD ); } catch (PDOException $e) { die("PDO CONNECTION ERROR: " . $e->getMessage() . "<br/>"); } } return self::$PDOInstance; } /** * Initiates a transaction * * @return bool */ public function beginTransaction() { return self::$PDOInstance->beginTransaction(); } public function prepare($statement,$driver_options = false) { //log the $statement if (!$driver_options) $driver_options = array(); return self::$PDOInstance->prepare($statement,$driver_options); } }
以上是脚本宝典为你收集整理的php – 使用PDO执行时间记录查询 – 自动完成功能无效全部内容,希望文章能够帮你解决php – 使用PDO执行时间记录查询 – 自动完成功能无效所遇到的问题。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。