За последние 24 часа нас посетили 36373 программиста и 1493 робота. Сейчас ищут 1162 программиста ...

pdo_mysql_class.php

Тема в разделе "Прочее", создана пользователем Vantedur, 16 апр 2013.

  1. Vantedur

    Vantedur Активный пользователь

    С нами с:
    9 июл 2010
    Сообщения:
    779
    Симпатии:
    2
    Может кто заделаться укомплектованным классом.

    ну если не ясно о чём я то приведу пример mysqlli_class
    Код (Text):
    1.  
    2. <?php
    3. class db{
    4.     var $db_id = false;
    5.     var $query_num = 0;
    6.     var $query_list = array();
    7.     var $mysql_error = '';
    8.     var $mysql_version = '';
    9.     var $mysql_error_num = 0;
    10.     var $mysql_extend = "MySQLi";
    11.     var $MySQL_time_taken = 0;
    12.     var $query_id = false;
    13.     function connect($db_user, $db_pass, $db_name, $db_location = 'localhost', $show_error=1){
    14.         $db_location = explode(":", $db_location);
    15.         if (isset($db_location[1])) {
    16.             $this->db_id = @mysqli_connect($db_location[0], $db_user, $db_pass, $db_name, $db_location[1]);
    17.         } else {
    18.             $this->db_id = @mysqli_connect($db_location[0], $db_user, $db_pass, $db_name);
    19.         }
    20.         if(!$this->db_id) {
    21.             if($show_error == 1) {
    22.                 $this->display_error(mysqli_connect_error(), '1');
    23.             } else {
    24.                 return false;
    25.             }
    26.         }
    27.         $this->mysql_version = mysqli_get_server_info($this->db_id);
    28.         if(!defined('COLLATE')){ define ("COLLATE", "cp1251");}
    29.         mysqli_query($this->db_id, "SET NAMES '" . COLLATE . "'");
    30.         return true;
    31.     }
    32.     function query($query, $show_error=true){
    33.         $time_before = $this->get_real_time();
    34.         if(!$this->db_id) $this->connect(DBUSER, DBPASS, DBNAME, DBHOST);
    35.         if(!($this->query_id = mysqli_query($this->db_id, $query) )) {
    36.             $this->mysql_error = mysqli_error($this->db_id);
    37.             $this->mysql_error_num = mysqli_errno($this->db_id);
    38.             if($show_error) {
    39.                 $this->display_error($this->mysql_error, $this->mysql_error_num, $query);
    40.             }
    41.         }
    42.         $this->MySQL_time_taken += $this->get_real_time() - $time_before;
    43.         $this->query_num ++;
    44.         return $this->query_id;
    45.     }
    46.     function get_row($query_id = ''){
    47.         if ($query_id == '') $query_id = $this->query_id;
    48.         return mysqli_fetch_assoc($query_id);
    49.     }
    50.     function get_affected_rows(){
    51.         return mysqli_affected_rows($this->db_id);
    52.     }
    53.     function get_array($query_id = ''){
    54.         if ($query_id == '') $query_id = $this->query_id;
    55.         return mysqli_fetch_array($query_id);
    56.     }
    57.     function super_query($query, $multi = false){
    58.         if(!$multi) {
    59.             $this->query($query);
    60.             $data = $this->get_row();
    61.             $this->free();         
    62.             return $data;
    63.         } else {
    64.             $this->query($query);
    65.             $rows = array();
    66.             while($row = $this->get_row()) {
    67.                 $rows[] = $row;
    68.             }
    69.             $this->free();         
    70.             return $rows;
    71.         }
    72.     }
    73.     function num_rows($query_id = ''){
    74.         if ($query_id == '') $query_id = $this->query_id;
    75.         return mysqli_num_rows($query_id);
    76.     }
    77.     function insert_id(){
    78.         return mysqli_insert_id($this->db_id);
    79.     }
    80.     function get_result_fields($query_id = '') {
    81.         if ($query_id == '') $query_id = $this->query_id;
    82.         while ($field = mysqli_fetch_field($query_id)){
    83.             $fields[] = $field;
    84.         }
    85.         return $fields;
    86.     }
    87.     function safesql( $source ){
    88.         if(!$this->db_id) $this->connect(DBUSER, DBPASS, DBNAME, DBHOST);
    89.         if ($this->db_id) return mysqli_real_escape_string ($this->db_id, $source);
    90.         else return addslashes($source);
    91.     }
    92.     function free( $query_id = '' ){
    93.         if ($query_id == '') $query_id = $this->query_id;
    94.         @mysqli_free_result($query_id);
    95.     }
    96.     function close(){
    97.         @mysqli_close($this->db_id);
    98.     }
    99.     function get_real_time(){
    100.         list($seconds, $microSeconds) = explode(' ', microtime());
    101.         return ((float)$seconds + (float)$microSeconds);
    102.     }  
    103.     function display_error($error, $error_num, $query = ''){
    104.         if($query) {
    105.             $query = preg_replace("/([0-9a-f]){32}/", "********************************", $query);
    106.         }
    107.         $query = htmlspecialchars($query, ENT_QUOTES, 'ISO-8859-1');
    108.         $error = htmlspecialchars($error, ENT_QUOTES, 'ISO-8859-1');
    109.         $trace = debug_backtrace();
    110.         $level = 0;
    111.         if ($trace[1]['function'] == "query" ) $level = 1;
    112.         if ($trace[2]['function'] == "super_query" ) $level = 2;
    113.         $trace[$level]['file'] = str_replace(ROOT_DIR, "", $trace[$level]['file']);
    114.         echo <<<HTML
    115. <?xml version="1.0" encoding="iso-8859-1"?>
    116. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    117. <html xmlns="http://www.w3.org/1999/xhtml">
    118. <head>
    119. <title>MySQL Fatal Error</title>
    120. <meta http-equiv="Content-Type" content="text/html; charset=windows-1251" />
    121. <style type="text/css">
    122. <!--
    123. body {
    124.     font-family: Verdana, Arial, Helvetica, sans-serif;
    125.     font-size: 11px;
    126.     font-style: normal;
    127.     color: #000000;
    128. }
    129. .top {
    130.   color: #ffffff;
    131.   font-size: 15px;
    132.   font-weight: bold;
    133.   padding-left: 20px;
    134.   padding-top: 10px;
    135.   padding-bottom: 10px;
    136.   text-shadow: 0 1px 1px rgba(0, 0, 0, 0.75);
    137.   background-color: #AB2B2D;
    138.   background-image: -moz-linear-gradient(top, #CC3C3F, #982628);
    139.   background-image: -ms-linear-gradient(top, #CC3C3F, #982628);
    140.   background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#CC3C3F), to(#982628));
    141.   background-image: -webkit-linear-gradient(top, #CC3C3F, #982628);
    142.   background-image: -o-linear-gradient(top, #CC3C3F, #982628);
    143.   background-image: linear-gradient(top, #CC3C3F, #982628);
    144.   filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#CC3C3F', endColorstr='#982628',GradientType=0 );
    145.   background-repeat: repeat-x;
    146.   border-bottom: 1px solid #ffffff;
    147. }
    148. .box {
    149.     margin: 10px;
    150.     padding: 4px;
    151.     background-color: #EFEDED;
    152.     border: 1px solid #DEDCDC;
    153. }
    154. -->
    155. </style>
    156. </head>
    157. <body>
    158.     <div style="width: 700px;margin: 20px; border: 1px solid #D9D9D9; background-color: #F1EFEF;" >
    159.         <div class="top" >MySQL Error!</div>
    160.         <div class="box" ><b>MySQL error</b> in file: <b>{$trace[$level]['file']}</b> at line <b>{$trace[$level]['line']}</b></div>
    161.         <div class="box" >Error Number: <b>{$error_num}</b></div>
    162.         <div class="box" >The Error returned was:<br /> <b>{$error}</b></div>
    163.         <div class="box" ><b>SQL query:</b><br /><br />{$query}</div>
    164.         </div>     
    165. </body>
    166. </html>
    167. HTML;
    168.         exit();
    169.     }
    170. }
    171. ?>
    Добавлено спустя 28 минут 24 секунды:
    http://php.ru/forum/viewtopic.php?t=33516 нашол такой вариант
    Код (Text):
    1.  
    2. <?php
    3. //      Класс для работы с БД (PDO)        @package AcFrame        @author Sylex       @copyright 2011, AcFrame         @version 1.0 (2011/06/08)
    4. class db {
    5. //      Экземпляр объекта       @var object
    6. private static $_instance;
    7. //      Текущая БД (в конфиге)         @var string
    8. private static $_name;
    9. //      Режим отладки        @var int
    10. private static $_debug = 0;
    11. //      Режим записи ошибок в лог      @var int
    12. private static $_log_error = 0;
    13. //      Время выполнения запроса в секундах - для записи запросов в лог (если 0 - отключено)       @var int
    14. private static $_log_sql = 0;
    15. //      Вывод времени выполнения запросов         @var int
    16. private static $_print_time = 0;
    17. //      Счетчик количества запросов            @var int
    18. private static $_nq = 0;
    19. //      Текущее подготовленное выражение      @var object
    20. private static $_statement = null;
    21. // Запрещаем создавать объект
    22. private function __construct() {}
    23. // Запрещаем клонировать объект
    24. private function __clone() {}
    25. //      Вызов всех статических методов для PDO (PHP ver. >= 5.3)      @param $method - метод         @param $arguments - аргументы       @return mixed
    26. final public static function __callStatic($method, $arguments){ $_instance = self::init(); return call_user_func_array(array($_instance, $method), $arguments); }
    27. //      Возвращает текущий экзмепляр объекта PDO или создает новое соединение         @param string $name - имя конфига         @return object
    28. public static function init($name = ''){
    29.     if (empty($name)) $name = !empty(self::$_name) ? self::$_name : 'default';
    30.     if (!self::$_instance || self::$_name != $name) {
    31.         if (!class_exists('PDO')) { self::error('Extension PDO not installed'); }
    32.         $config = Config::read('database');
    33.         $db_config = $config[$name];
    34.         self::$_debug = (int) $db_config['debug'];
    35.         self::$_log_error = (int) $db_config['log_error'];
    36.         self::$_log_sql = isset($db_config['log_sql']) ? floatval($db_config['log_sql']) : 0;
    37.         $params = array( PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES '{$db_config['char']}'", PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION );
    38.         try { self::$_instance = new PDO("{$db_config['driver']}:host={$db_config['host']};dbname={$db_config['name']}", $db_config['user'], $db_config['pass'], $params); } catch (PDOException $e) {self::error('Connection failed: ' . $e->getMessage()); }
    39.         self::$_name = $name;
    40.     }
    41.     return self::$_instance;
    42. }
    43. //      Выполняет запрос         @param string/array $sql - запрос         @return bool
    44. public static function query($sql) {
    45.     $state = false;
    46.     if (is_array($sql)) {
    47.         $args = func_get_args();
    48.         $args = isset($args[0]) ? $args[0] : array('');
    49.         $sql = strval(array_shift($args));
    50.     }
    51.     if (empty($sql)){ return false; }
    52.     if (self::$_print_time == 1 || self::$_log_sql > 0) { benchmark::startTimer('db_query'); }
    53.     try { self::$_statement = self::init()->prepare($sql); } catch (PDOException $e) { $es = array(); foreach($e->getTrace() as $v) { $es[] = $v['file'] . ' on line ' . $v['line']; } $es = implode("\n", $es); self::error('['.$e->errorInfo[1].'] ' . $e->errorInfo[2]. "\n\nQuery: <b>" . $sql . "</b>\n\n" . $es . "\n", $e->errorInfo[0]); }
    54.     if (is_object(self::$_statement)) {
    55.         if (!isset($args)) { $args = func_get_args(); array_shift($args); }
    56.         if (func_num_args() > 1) { if (is_array($args[0])) { $args = $args[0]; } }
    57.         try { $state = self::$_statement->execute($args); self::$_nq++; } catch(Exception $e) { $es = array(); foreach($e->getTrace() as $v) { $es[] = $v['file'] . ' on line ' . $v['line']; }
    58.         $es = implode("\n", $es);
    59.         self::error('['.$e->errorInfo[1].'] ' . $e->errorInfo[2]. "\n\nQuery: <b>" . $sql . "</b>\n\n" . $es . "\n", $e->errorInfo[0]);
    60.     }
    61.     if (self::$_print_time == 1 || self::$_log_sql > 0) {
    62.         $time = benchmark::getTimer('db_query');
    63.         if (self::$_print_time == 1) { echo $time, '<br />', $sql, '<br /><br />'; } elseif($time >= self::$_log_sql) { @file_put_contents(LOG . date('Y-m-d') . '_db_query.log', date('Y-m-d H:i:s') . ' ' . self::$_name . ' *** ' . $time . ' - ' . $sql . "\n\n", FILE_APPEND); }
    64.     }
    65.     if ($state === false) { $e = self::$_statement->errorInfo(); self::error('['.$e[1].']',$e[2]. "\nQuery: " . $sql, $e[0]); }
    66. }
    67. return $state;
    68. }
    69. // Возвращает одно значение       @param string $sql - запрос        @return mixed
    70. public static function getOne($sql) { self::query(func_get_args()); return is_object(self::$_statement) ? self::$_statement->fetchColumn() : false; }
    71. // Возвращает строку            @param string $sql - запрос       @return mixed
    72. public static function getRow($sql) { self::query(func_get_args()); return is_object(self::$_statement) ? self::$_statement->fetch(PDO::FETCH_OBJ) : false; }
    73. // Возвращает ряд строк       @param string/array $sql - запрос         @return mixed
    74. public static function getAll($sql) { self::query(func_get_args()); return is_object(self::$_statement) ? self::$_statement->fetchAll(PDO::FETCH_OBJ) : false; }
    75. // Обработка исключений      @param string $message - сообщение         @param int $code - код ошибки
    76. private static function error($message, $code = 0){ if (self::$_log_error == 1) { @file_put_contents(LOG . date('Y-m-d') . '_db_error.log', date('Y-m-d H:i:s') . ' *** ' . $code . ' - ' . $message. "\n\n", FILE_APPEND);} if (self::$_debug == 0) { throw new Error('error in ' . __CLASS__, -1); } elseif(self::$_debug == 1) { throw new Error($message, $code); } }
    77. // Установка кодировки            @param string $char - кодировка
    78. public static function setNames($char) { db::init(); self::query("SET NAMES ?", $char); }
    79. // Установка режима отладки       @param int $mode - режим
    80. public static function setDebug($mode) { db::init(); self::$_debug = (int) $mode; }
    81. // Установка режима вывода времени выполнения запросов на экран        @param int $mode - режим
    82. public static function setPrintTime($mode) { self::$_print_time = (int) $mode; }
    83. // Установка режима логирования запросов в файл      @param int $mode - режим
    84. public static function setLogError($mode) { db::init(); self::$_log_error = (int) $mode; }
    85. // Возвращает общее количество запросов        @return int
    86. public static function getQueries() { return self::$_nq; }
    87. // объявление методов только PHP ver. < 5.3
    88. // Возвращает кол-во строк затронутых при запросах DELETE, INSERT или UPDATE        @return int
    89. public static function rowCount() { return is_object(self::$_statement) ? intval(self::$_statement->rowCount()) : 0; }
    90. // Возвращает ID последней вставленной записи       @param string $name         @return string
    91. public static function lastInsertId($name = null) { return self::init()->lastInsertId($name); }
    92. // Начать транзакцию        @return bool
    93. public static function beginTransaction() { return self::init()->beginTransaction(); }
    94. // Завершить транзакцию  @return bool
    95. public static function commit() { return self::init()->commit(); }
    96. // Отменить транзакцию        @return bool
    97. public static function rollBack() { return self::init()->rollBack(); }
    98. } // конец класса db
    99. ?>
    Добавлено спустя 20 минут 17 секунд:
    нашол такой вариант
    http://php.ru/forum/viewtopic.php?t=12857
    Код (Text):
    1. <?php
    2. class SQL{
    3.     private $db  = NULL;
    4.     private $error_log  = NULL;
    5.     private $query_log  = NULL;
    6.     private $r   = NULL;
    7.     private $all = 0;
    8.     private $q = NULL;
    9.     private $tmp_query = NULL;
    10.     public function __construct( $db_host , $db_name , $db_user , $db_pass ) {
    11.         $db = new PDO( 'mysql:host='.$db_host.';dbname='.$db_name , $db_user , $db_pass );
    12.         if( !$db )  return( false );
    13.         $db -> exec( 'SET NAMES '.DB_ENCODING );
    14.         $this -> db = $db;
    15.         $this -> error_log['all'] = 0;
    16.         $this -> query_log['all'] = 0;
    17.     }
    18.     private function add_query_log( $query , $array , $res ) { $this -> all++; if( $res ){  $this -> q[ $this -> all ][0] = true; }else{     $this -> q[ $this -> all ][0] = false; }$this -> q[ $this -> all ][1] = $query; $this -> q[ $this -> all ][2] = $array; }
    19.     public function log() {
    20.         $all = $this -> all;
    21.         $q = $this -> q;
    22.         if( $all > 0 )  echo '<br><b>DB log:</b><hr>';
    23.         print_r( $this -> db -> errorInfo() );
    24.         echo '<hr>';
    25.         for( $i=1 ; $i<=$all ; $i++ ) {
    26.             $query = $q[$i][1]; $n = 0; $data = NULL;
    27.             if( $q[$i][2] ) { foreach( $q[$i][2] as $val ) { $n++; $data[$n] = $val; } }
    28.             $n = 0;
    29.             while( is_int( $pos = strpos( $query , '?' , 0 ) ) ) { $n++; if( isset( $data[$n] ) ) { $query = substr_replace( $query , '\''.$data[$n].'\'' , $pos , true ); } else{  $query = str_replace( '?' , '#' , $query ); }}
    30.             if( $q[$i][0] ) echo '<b>['.$i.']</b>&nbsp;'.$query.';<hr>';
    31.             else     echo '<b>['.$i.']</b>&nbsp;<font color="red">'.$query.';</font><hr>';
    32.         }
    33.     }
    34.     public function get_res() { return( $this -> r ); }
    35.     public function fetch() { return( $this -> r -> fetch(PDO::FETCH_ASSOC) ); }
    36.     public function fetch_all() { return( $this -> r -> fetchAll(PDO::FETCH_ASSOC) ); }
    37.     public function count() { return( $this -> r -> rowCount() ); }
    38.     private function del_slashes( $data ) { foreach( $data as $key => $value ) { $data[$key] = stripslashes( $value ); } return( $data ); }
    39.     public function prepare( $request ) { $this -> tmp_query = $request;
    40.         if( $this -> r = $this -> db -> prepare( $request ) ){  return( true ); }
    41.         else{   return( false );}
    42.     }
    43.     public function execute( $p ) { $p = $this -> del_slashes( $p );
    44.         if( $this -> r -> execute( $p ) ) { $this -> add_query_log( $this -> tmp_query , $p , true );return( true ); }
    45.         else { $this -> add_query_log( $this -> tmp_query , $p , false );return( false ); }
    46.     }
    47.     public function last_id() { return( $this -> db -> lastInsertId() ); }
    48.     public function get_row( $table , $what , $where , $param ) {
    49.         if( $r = $this -> db -> prepare( 'SELECT '.$what.' FROM '.DB_TABLE_PREF.$table.' WHERE '.$where ) ) {
    50.             if( $r -> execute( $param ) ) {
    51.                 if( $row = $r -> fetch(PDO::FETCH_ASSOC) ) { $this -> add_query_log( 'SELECT '.$what.' FROM '.DB_TABLE_PREF.$table.' WHERE '.$where , $param , true );return( $row ); }
    52.                 else { $this -> add_query_log( 'SELECT '.$what.' FROM '.DB_TABLE_PREF.$table.' WHERE '.$where , $param , false );return( false ); } }
    53.             else { $this -> add_query_log( 'SELECT '.$what.' FROM '.DB_TABLE_PREF.$table.' WHERE '.$where , $param , false );return( false ); }
    54.         } else { $this -> add_query_log( 'SELECT '.$what.' FROM '.DB_TABLE_PREF.$table.' WHERE '.$where , $param , false );return( false ); }
    55.     }
    56.     public function insert( $table , $fields , $data ) {
    57.     $data = $this -> del_slashes( $data );
    58.     $all = count( $data );
    59.     $query = 'INSERT INTO '.DB_TABLE_PREF.$table.' ('.$fields.') VALUES ( ';
    60.     if( $all > 0 )  $query .= ' ? ';
    61.     for( $i=1 ; $i<$all ; $i++ )    $query .= ', ? ';
    62.     $query .= ')';
    63.     if( $r = $this -> db -> prepare( $query ) ) {
    64.         if( $r -> execute( $data ) ) { $this -> add_query_log( $query , $data , true );return( $this -> db -> lastInsertId() ); }
    65.         else { $this -> add_query_log( $query , $data , false );return( false ); }
    66.         } else { $this -> add_query_log( $query , $data , false );return( false ); }
    67.     }
    68.     public function select( $table , $what , $where , $data ) {
    69.         $data = $this -> del_slashes( $data );
    70.         $query = 'SELECT '.$what.' FROM '.DB_TABLE_PREF.$table.' WHERE '.$where;
    71.         if( $r = $this -> db -> prepare( $query ) ) {
    72.             if( $r -> execute( $data ) ) { $this -> add_query_log( $query , $data , true );$this -> r = $r; return( true ); }
    73.             else { $this -> add_query_log( $query , $data , false );return( false ); }
    74.         } else { $this -> add_query_log( $query , $data , false );return( false ); }
    75.     }
    76.     public function update( $table , $what , $where , $data , $limit ) {
    77.         $data = $this -> del_slashes( $data );
    78.         $query = 'UPDATE '.DB_TABLE_PREF.$table.' SET '.$what;
    79.         if( $where )    $query .= ' WHERE '.$where;
    80.         if( $limit = (int)$limit > 0 )  $query .= ' LIMIT '.$limit;
    81.         if( $r = $this -> db -> prepare( $query ) ) {
    82.             if( $r -> execute( $data ) ) { $this -> add_query_log( $query , $data , true );return( $r -> rowCount() ); }
    83.             else { $this -> add_query_log( $query , $data , false );return( false ); } }
    84.         else { $this -> add_query_log( $query , $data , false );return( false ); }
    85.     }
    86.     public function delete( $table , $where , $data , $limit ) {
    87.         $query = 'DELETE FROM '.DB_TABLE_PREF.$table.' WHERE '.$where;
    88.         if( $limit = (int)$limit > 0 )  $query .= ' LIMIT '.$limit;
    89.         if( $r = $this -> db -> prepare( $query ) ) {
    90.             if( $r -> execute( $data ) ) { $this -> add_query_log( $query , $data , true );return( $r -> rowCount() ); }
    91.             else { $this -> add_query_log( $query , $data , false );return( false ); }
    92.         }else{$this -> add_query_log( $query , $data , false );return( false ); }
    93.     }
    94.     public function query( $query ) {
    95.         if( $this -> r = $this -> db -> query( $query ) ) { $this -> add_query_log( $query , NULL , true ); return( true ); }
    96.         else { $this -> add_query_log( $query , NULL , false ); return( false ); }
    97.     }
    98. }
    99. ?>
    p.s.
    Домашняя страница http://php.ru/manual/book.pdo.html
    www.php.net/manual/ru/book.pdo.php
    статья про pdo http://habrahabr.ru/post/137664/


    Есть у кого ещё варианты?