Форум программистов, компьютерный форум, киберфорум
PHP: ООП
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/8: Рейтинг темы: голосов - 8, средняя оценка - 5.00
62 / 29 / 5
Регистрация: 20.11.2009
Сообщений: 193

Как правильно достучаться к методам PDO через метод Синглтона обертки?

05.09.2012, 14:47. Показов 1667. Ответов 3
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Есть заготовка класса Singleton для работы c PDO:
Кликните здесь для просмотра всего текста

PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
<?php
 
/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
 
/**
 * Description of Databse
 * It's singleton PDO connection class.
 * 
 * @author Егор
 */
class Database {  
 
    protected static $_instance = NULL;
 
    protected static $_statement = NULL;
    
    private function __construct() {        
    }
 
    private function __clone() {
    }
 
    private function __wakeup() {
    }
 
    public static function getConnect() {
        
        if (!class_exists('PDO')) {
          
            self::error('Расширение PDO не установлено! 
                Проверьте настройки PHP.ini или наличе модуля в системе.');
        }
        
        if (self::$_instance === null) {
            
             try {
         
                 self::$_instance = new PDO("mysql:dbname=devices; 
                     host=localhost;",'root','wadada22');
                 
                 self::$_instance->setAttribute(PDO::ATTR_ERRMODE, 
                         PDO::ERRMODE_EXCEPTION);
                 
                      
             } catch (PDOException $error_string) {
                 
                 echo "Произошла ошибка подключения к БД:<br/>", $error_string;
                            
             }
                 
            self::$_instance = new self;
            
            echo "Соединение установлено!<br/>";
            
        }
 
        return self::$_instance;
        
    }
 
// Функция обертка методов prepare и query. 
    
   public static function showAll() {
        
        
       try {
           $_statement = self::getConnect();
 
 
           $_result = $_statement::query('SELECT * FROM devices');
 
 
           foreach ($_result as $row)         {
               print $row[0] . ' - ' . $row[1] . '<br />';
           }
 
 
           return $_result;
       } catch (PDOException $exc) {
           echo $exc->getTraceAsString();
       }
          
    }
}
?>


По идее, при вызове
PHP
1
Database::showAll();
должен вызваться метод query PDO (по ссылке) но этого не происходит. То есть как результатFatal error: Call to undefined method Database::query() in /var/www/sproject/model/Database.php. Судя по всему, в методе showAll вызов query должен как то иначе происходить.
Как же достучаться до методов PDO?
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
05.09.2012, 14:47
Ответы с готовыми решениями:

Как правильно сформировать запрос mysql в pdo?
Здравствуйте, У меня есть два вопроса: Как правильно сформировать массив подстановки в execute? Как создать метод save, который будет...

Как достучаться до псевдоэлемента через потомка (использование hover)?
Добрый день Уважаемые, есть блок, при наведении на который должно всплывать окошко созданное через css 3 и псевдоэлемент. Вот структура: ...

Как правильно использовать экземпляр PDO в своём классе?
Читал тему, но приведенный вариант в самом конце не подходит. Поэтому вынес подключние к базе в отдельный класс, где в конструкторе идет...

3
 Аватар для basili4
201 / 199 / 4
Регистрация: 13.06.2012
Сообщений: 1,009
Записей в блоге: 3
05.09.2012, 15:01
Цитата Сообщение от hunty Посмотреть сообщение
PHP
1
self::$_instance = new self;
Это зачем ?

Добавлено через 1 минуту
судя по всему эта строчка все и ломает
1
62 / 29 / 5
Регистрация: 20.11.2009
Сообщений: 193
06.09.2012, 11:49  [ТС]
Действительно! Именно этот кусок я взял из примера с одного блога. Непонятно как у людей работало ). И еще, методы PDO не статические, то есть потом либо вызывать их так
PHP
1
$_statement->query('SELECT * FROM devices')
либо через __callStatic. Только я не пойму как реализовать.
0
 Аватар для basili4
201 / 199 / 4
Регистрация: 13.06.2012
Сообщений: 1,009
Записей в блоге: 3
06.09.2012, 12:10
http://necromant-2005.livejournal.com/62466.html
Вот пример
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
06.09.2012, 12:10
Помогаю со студенческими работами здесь

Как правильно вставить название столбца из переменной в pdo запросе
Приветствую) Ребят, помогите решить задачку.. Имеется $a = 'название столбца' . $b; $b это значение с $_GET вариант 1 ...

Подскажите, как правильно работать с PDO / mysqli или Call to a member function query() on a non-object
Начинаю понемногу обучаться ООП. Ну раз ООП - так ООП и я решил попробовать объектно-ориентированный подход в работе с базами данных....

Как отправить несколько запросов через PDO
Здравствуйте. Заранее прошу прощения за неграмотность Начал делать страницу регистрации и столкнулся со сложностью. Есть код if...

Метод lfind(), как правильно написать метод сравнения?
Всем привет. У меня задача предельно проста. Есть массив char M;, В него пихаем всё, что содержится в файле while(!(feof(f))) { ...

Как пробиться через рефлексию к закрытым методам get, set для авто-свойства?
Добрый день. Как пробиться через рефлексию к закрытым методам get, set для авто-свойства? Если стучусь к такому свойству ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Новые блоги и статьи
http://iceja.net/ математические сервисы
iceja 20.01.2026
Обновила свой сайт http:/ / iceja. net/ , приделала Fast Fourier Transform экстраполяцию сигналов. Однако предсказывает далеко не каждый сигнал (см ограничения http:/ / iceja. net/ fourier/ docs ). Также. . .
http://iceja.net/ сервер решения полиномов
iceja 18.01.2026
Выкатила http:/ / iceja. net/ сервер решения полиномов (находит действительные корни полиномов методом Штурма). На сайте документация по API, но скажу прямо VPS слабенький и 200 000 полиномов. . .
Расчёт переходных процессов в цепи постоянного тока
igorrr37 16.01.2026
/ * Дана цепь(не выше 3-го порядка) постоянного тока с элементами R, L, C, k(ключ), U, E, J. Программа находит переходные токи и напряжения на элементах схемы классическим методом(1 и 2 з-ны. . .
Восстановить юзерскрипты Greasemonkey из бэкапа браузера
damix 15.01.2026
Если восстановить из бэкапа профиль Firefox после переустановки винды, то список юзерскриптов в Greasemonkey будет пустым. Но восстановить их можно так. Для этого понадобится консольная утилита. . .
Сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11 Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru