Правила     Закладки     Карма    Календарь    Журналы    Помощь    Поиск    PDA    Чат   
        СМС-ки
   
Пейджер выключен!
Страницы: (2) 1 [2]  ( Перейти к первому непрочитанному сообщению )  
Фильтр авторов:    показать 
  скрыть
  Ответ в темуСоздание новой темыСоздание опроса

> Не до конца работает PDO
Arh  
Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



146%
******

Профиль
Группа: Форумчанин
Завсегдатай форума
Сообщений: 2371
Пользователь №: 27172
На форуме: 6 лет, 2 месяца, 24 дня
Карма: 76




maximka787
А что мешает потестить твой код самому?
Ты просишь нас его читать и тестить.
Тебе и глобал подойдёт и через аргументы и всё выкинуть и переписать на DI и через статический, любой способ подойдёт, вопрос задачи и времени.


--------------------
:)
PMСайт пользователя
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
SerginhoLD  
Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



че?
******

Профиль
Группа: Форумчанин
Завсегдатай форума
Сообщений: 719
Пользователь №: 24500
На форуме: 6 лет, 8 месяцев, 3 дня
Карма: 55




    static public function query($query)
{
return self::$db->query($query);
}

static public function prepare($query)
{
return self::$db->prepare($query);
}

во-первых тебе эти функции не нужны, во-вторых если уж хочется эти методы сделать, то

static public function query($query)
{
return self::instance()->query($query);
}

и не надо:
Цитата
вводим один раз


--------------------
"internet explorer всех правильней отображает страницы" ©
PM
    1   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
killer8080  
Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Здесь живет
******

Профиль
Группа: Эксперт
Группа переписки
Сообщений: 8948
Пользователь №: 26630
На форуме: 6 лет, 3 месяца, 24 дня
Карма: 606




Цитата (maximka787 @ 7.02.2017 - 13:51)
public function __construct(){}
public function __clone(){}

это не singleton, что мне помешает сделать new DB ?
эти методы должны быть приватными!
Цитата (maximka787 @ 7.02.2017 - 13:51)
$stmt = DB::instance(); //вводим один раз

$stmt = DB::query('SELECT * FROM `tab` LIMIT 10');

почему не просто
$pdo = DB::instance();
$stmt = $pdo->query('SELECT * FROM `tab` LIMIT 10');

Цитата (maximka787 @ 7.02.2017 - 13:51)
$a = array();

if($stmt->fetchColumn() > 0)
{
while($row = $stmt->fetch())
{
  $a[$row['id']] = $row['text'];
}
}

есть же PDOStatement::fetchAll
и причём здесь fetchColumn?
PMПисьмо на e-mail пользователю
    1   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
maximka787  
 ۩  Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Здесь живет
******

Профиль
Группа: Форумчанин
Завсегдатай форума
Сообщений: 1258
Пользователь №: 2705
На форуме: 9 лет, 10 месяцев, 18 дней
Карма: 1




Цитата (Arh @ 7.02.2017 - 16:43)
maximka787
А что мешает потестить твой код самому?
Ты просишь нас его читать и тестить.
Тебе и глобал подойдёт и через аргументы и всё выкинуть и переписать на DI и через статический, любой способ подойдёт, вопрос задачи и времени.

У меня есть функция вида
function xxx(){

mysql_query($query);

...


}

И я не парюсь за наличия соединения, ибо в начале уже его установил. Но дали задание заменить наименьшими усилиями на PDO.
А так да, согласен, что вариантов много. Я ж не знаю подводных камней. Вдруг сделаю, а оно потом где-то аукнется. особенно в ООП.


--------------------
..Работает - не трогай!
PM
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
maximka787  
 ۩  Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Здесь живет
******

Профиль
Группа: Форумчанин
Завсегдатай форума
Сообщений: 1258
Пользователь №: 2705
На форуме: 9 лет, 10 месяцев, 18 дней
Карма: 1




killer8080
Спасибо, попробую изменить.

На счет if($stmt->fetchColumn() > 0)
Определяю сколько строк вернул MYSQL и если больше 0 то прогоняю через цикл.
Вот моя основная конструкция
$result = mysql_query($query);
if(mysql_num_rows($result) > 0)
{
while($row = mysql_fetch_array($result))
{
$a[$row['id']]['name'] = $row['name'];
$a[$row['id']]['price'] = $row['price'];
$a[$row['id']]['xxx'] = $row['xxx'];
}
}

mysql_fetch_assoc я очень редко использую, тк массив надо наполнять по разному.


--------------------
..Работает - не трогай!
PM
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
maximka787  
 ۩  Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Здесь живет
******

Профиль
Группа: Форумчанин
Завсегдатай форума
Сообщений: 1258
Пользователь №: 2705
На форуме: 9 лет, 10 месяцев, 18 дней
Карма: 1




Цитата (SerginhoLD @ 7.02.2017 - 17:19)
во-первых тебе эти функции не нужны, во-вторых если уж хочется эти методы сделать, то

static public function query($query)
{
return self::instance()->query($query);
}

Так так...
Попробую догнать.


--------------------
..Работает - не трогай!
PM
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
Arh  
[x] Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



146%
******

Профиль
Группа: Форумчанин
Завсегдатай форума
Сообщений: 2371
Пользователь №: 27172
На форуме: 6 лет, 2 месяца, 24 дня
Карма: 76




maximka787
Цитата
А так да, согласен, что вариантов много.

Можно самый простой на мой взгляд.

<?php

# Класс
class Container {

protected static $storage = [];

public static function set ($name, $data) {
self::$storage[$name] = $data;
}

public static function get ($name) {
return isset(self::$storage[$name]) ? self::$storage[$name] : false;
}

}


# База
$config = [
'host' => 'localhost',
'dbname' => 'base',
'user' => 'root',
'password' => '',
'type' => 'mysql',
'charset' => 'utf8'
];
$DB = new \PDO($config['type'] . ":dbname=" . $config['dbname'] . ";host=" . $config['host'], $config['user'], $config['password'], []);
$DB->setAttribute(\PDO::MYSQL_ATTR_INIT_COMMAND, "SET NAMES " . $config['charset'] . "; SET TIME_ZONE = '" . date_default_timezone_get() . "'");
$DB->setAttribute(\PDO::ATTR_ERRMODE, \PDO::ERRMODE_EXCEPTION);
$DB->setAttribute(\PDO::ATTR_DEFAULT_FETCH_MODE, \PDO::FETCH_ASSOC);

# Контейнер
Container::set('DB', $DB);

# Ещё что то
$MemCache = new Memcache;
$MemCache->addServer('127.0.0.1', 11211);

# Контейнер
Container::set('MemCache', $MemCache);


# Функция
function xxx () {

$DB = Container::get('DB');
$data = $DB->query('...')->fetchAll();

$result = [];
foreach ($data as $item) {
$result[] = $item['id'];
}

return $result;

}

# Функция
function yyy ($key) {

$MemCache = Container::get('MemCache');
return $MemCache->get($key);

}

print_r(xxx());
echo yyy('test');






--------------------
:)
PMСайт пользователя
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
Arh  
[x] Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



146%
******

Профиль
Группа: Форумчанин
Завсегдатай форума
Сообщений: 2371
Пользователь №: 27172
На форуме: 6 лет, 2 месяца, 24 дня
Карма: 76




maximka787
Можно ещё так сделать


# Класс
class Container {

protected static $storage = [];

public static function set ($name, $data) {
self::$storage[$name] = $data;
}

public static function get ($name) {

if (isset(self::$storage[$name])) {
return is_callable(self::$storage[$name]) ? self::$storage[$name]->__invoke() : self::$storage[$name];
}

return false;
}

}


# База
$config = [
'host' => 'localhost',
'dbname' => 'base',
'user' => 'root',
'password' => '',
'type' => 'mysql',
'charset' => 'utf8'
];
$DB = new \PDO($config['type'] . ":dbname=" . $config['dbname'] . ";host=" . $config['host'], $config['user'], $config['password'], []);

# Контейнер
Container::set('DB', function () use ($DB) {

$DB->setAttribute(\PDO::MYSQL_ATTR_INIT_COMMAND, "SET NAMES " . $config['charset'] . "; SET TIME_ZONE = '" . date_default_timezone_get() . "'");
$DB->setAttribute(\PDO::ATTR_ERRMODE, \PDO::ERRMODE_EXCEPTION);
$DB->setAttribute(\PDO::ATTR_DEFAULT_FETCH_MODE, \PDO::FETCH_ASSOC);
return $DB;

});



--------------------
:)
PMСайт пользователя
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
maximka787  
 ۩  Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Здесь живет
******

Профиль
Группа: Форумчанин
Завсегдатай форума
Сообщений: 1258
Пользователь №: 2705
На форуме: 9 лет, 10 месяцев, 18 дней
Карма: 1




Arh
Спасибо большое за коды. Попробую разбираться. Код вообще не простой-то.


--------------------
..Работает - не трогай!
PM
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
Arh  
Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



146%
******

Профиль
Группа: Форумчанин
Завсегдатай форума
Сообщений: 2371
Пользователь №: 27172
На форуме: 6 лет, 2 месяца, 24 дня
Карма: 76




maximka787
Основная мысль в классе, который что то хранит и отдаёт)
Остальное для примера.


--------------------
:)
PMСайт пользователя
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
  Быстрый ответ
Информация о Госте
Введите Ваше имя
Кнопки кодов
Для вставки цитаты, выделите нужный текст и
НАЖМИТЕ СЮДА
Введите сообщение
Смайлики
:huh:  :o  ;) 
:P  :D  :lol: 
B)  :rolleyes:  <_< 
:)  :angry:  :( 
:unsure:  :blink:  :ph34r: 
     
Показать всё

Опции сообщения  Включить смайлики?
 Включить подпись?
 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:

Опции темыСтраницы: (2) 1 [2]  Ответ в темуСоздание новой темыСоздание опроса