[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Не до конца работает PDO
Страницы: 1, 2
Arh
maximka787
А что мешает потестить твой код самому?
Ты просишь нас его читать и тестить.
Тебе и глобал подойдёт и через аргументы и всё выкинуть и переписать на DI и через статический, любой способ подойдёт, вопрос задачи и времени.


_____________
Промокод предоставляет скидку на заказ домена и/или хостинга reg.ru
BFCC-3895-8804-9ED2
SerginhoLD
    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 всех правильней отображает страницы" ©
killer8080
Цитата (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?
maximka787
Цитата (Arh @ 7.02.2017 - 16:43)
maximka787
А что мешает потестить твой код самому?
Ты просишь нас его читать и тестить.
Тебе и глобал подойдёт и через аргументы и всё выкинуть и переписать на DI и через статический, любой способ подойдёт, вопрос задачи и времени.

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

mysql_query($query);

...


}

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

_____________
..Работает - не трогай!
maximka787
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 я очень редко использую, тк массив надо наполнять по разному.

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

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

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

_____________
..Работает - не трогай!
Arh
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');






_____________
Промокод предоставляет скидку на заказ домена и/или хостинга reg.ru
BFCC-3895-8804-9ED2
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.