Автор Тема: Singleton PDO  (Прочетена 11560 пъти)

0 Потребители и 1 Гост преглежда(т) тази тема.

HD

  • Administrator
  • Hero Member
  • *****
  • Благодарности
  • -Казани: 208
  • -Получени: 165
  • Публикации: 3077
Re: Singleton PDO
« Отговор #15 -: 06 Февруари 2013, 21:00:19 »
Ми добре. В интерес на истината това е първото дето го написах и след постването мина доста време, така че е възможно да съм допуснал подобни грешки. Бая време изтече от 2011 година. Ще се радвам да покажеш твоя версия на въпросния код.

Stan

  • Hero Member
  • *****
  • Благодарности
  • -Казани: 27
  • -Получени: 135
  • Публикации: 641
Re: Singleton PDO
« Отговор #16 -: 06 Февруари 2013, 23:40:58 »
Тя версията си е същата, но просто с оправени синтактични грешки.

вариянта с константите :

Код: PHP
  1.  
  2. //Singleton PDO
  3.  
  4. class MyPDO {
  5.  
  6. //DB const
  7. const DBHOST="localhost";
  8. const DBPORT="3306";
  9. const DBUSER="root";
  10. const DBPASS="";
  11. const DBNAME="test";
  12. const DBCHAR="utf-8";
  13.     //the instance of the object
  14.     private static $_instance = null;
  15.     //database information array
  16.     private static $_db_info = array();
  17.  
  18.     private function __construct() {
  19.  
  20.     }
  21.  
  22.     public static function getInstance() {
  23.  
  24.         if (empty(self::$_instance)) {
  25.             self::$_db_info = array(
  26.                 'db_host' => self::DBHOST,
  27.                 'db_port' => self::DBPORT,
  28.                 'db_user' => self::DBUSER,
  29.                 'db_pass' => self::DBPASS,
  30.                 'db_name' => self::DBNAME,
  31.                 'db_char' => self::DBCHAR);
  32.  
  33.             try {
  34.                 self::$_instance = new \PDO("mysql:host=" . self::$_db_info['db_host'] . ';port=' . self::$_db_info['db_port'] . ';dbname=' . self::$_db_info['db_name'], self::$_db_info['db_user'], self::$_db_info['db_pass']);
  35.                 self::$_instance->setAttribute(\PDO::ATTR_ERRMODE, \PDO::ERRMODE_SILENT);
  36.                 self::$_instance->query('SET NAMES utf8');
  37.                 self::$_instance->query('SET CHARACTER SET utf8');
  38.             } catch (\Exception $exc) {
  39.                 echo $exc->getTraceAsString();
  40.             }
  41.                
  42.        }
  43.       return self:: $_instance;
  44.     }
  45. }
  46. var_dump(\MyPDO::getInstance());

за вариянта с вземане на информацията от конфигурационен файл:

Код: PHP
  1.  
  2. //Singleton PDO
  3.  
  4.  
  5.  
  6. class MyPDO {
  7.  
  8.  
  9.     //the instance of the object
  10.     private static $_instance = null;
  11.  
  12.     //default config file
  13.     private static $_config_file = 'config.ini';
  14.  
  15.     private function __construct() {
  16.  
  17.     }
  18.    
  19.     public static function getInstance() {
  20.          
  21.         if(self::$_instance == null) {
  22.                        
  23.            $file = 'config/' . self::$_config_file;
  24.            $config = parse_ini_file($file, true);
  25.            if(!$config) {
  26.                        
  27.                      throw new \Exception('Unable to open stream' . $file);
  28.                        
  29.            }
  30.            try {
  31.                        
  32.               self::$_instance = new \PDO($config['database']['connect'],$config['database']['username'],$config['database']['password']);
  33.            }
  34.            catch (\PDOException $exc) {
  35.  
  36.                   echo $exc->getMessage();
  37.                   exit;
  38.  
  39.             }
  40.                        
  41.          }
  42.                
  43.          return self::$_instance;
  44.          
  45.       }
  46.       public static function setConfigFile($file)  {
  47.            if(!$file) {
  48.                
  49.                  throw new \Exception('Invalid filename');
  50.                
  51.            }
  52.            self::$_config_file = $file;  
  53.       }
  54. }
  55. //set new config file
  56. // \MyPDO::setConfigFile('filename.ini');
  57. var_dump(\MyPDO::getInstance());

config.ini:


;database configuration file
 
[database]
connect = "mysql:host=localhost;dbname=test"
username = "root"
password = ""
« Последна редакция: 06 Февруари 2013, 23:58:33 от Stan »