Loading...
PHP/MySQL | Для анализа, оценки, советов, дополнений и изменен
Смотрим обёртку и троллим по существу


<?php
class MyPDO
{
public static function run($sql, $params = [])
{
$query = self::connect()->prepare($sql);
if (empty($params[0])) :
foreach ($params as $item => $value) :
$query->bindValue($item, $value, self::type($value));
endforeach;
else :
$i = 1;
foreach ($params as $value) :
$query->bindValue($i++, $value, self::type($value));
endforeach;
endif;
$query->execute();
return $query;
}

public static function connect()
{
return new PDO('mysql:host=localhost;dbname=test;charset=utf8', 'root', '', [PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION, PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC, PDO::ATTR_EMULATE_PREPARES => true]);
}

public static function type($value)
{
if (is_bool($value)) :
return $type = PDO::PARAM_BOOL;
elseif (is_null($value)) :
return $type = PDO::PARAM_NULL;
elseif (is_int($value)) :
return $type = PDO::PARAM_INT;
elseif (is_string($value)) :
return $type = PDO::PARAM_STR;
else :
return $type = false;
endif;
}
}

// пример использования
MyPDO::run('запрос', [массив параметров])->метод();


:-)
PhpStorm, Зачем такая конструкция?
public static function run($sql, $params = [])

{

$query = self::connect()->prepare($sql);

if (empty($params[0])) :

foreach ($params as $item => $value) :

$query->bindValue($item, $value, self::type($value));

endforeach;

else :

$i = 1;

foreach ($params as $value) :

$query->bindValue($i++, $value, self::type($value));

endforeach;

endif;

$query->execute();

return $query;

}

А почему не так.
public static function run($sql, $params = [])

{

$query = self::connect()->prepare($sql);
$query->execute($params);
return $query;

}

P.S. Не понял, вот и спрашиваю. Просьба тапками не бросать.
________
посл. ред. 19.08.2017 в 07:15; всего 1 раз(а); by TuT
А добавить можно PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES UTF8' что бы проблем с кодировкой не было.
TuT (19.08.2017 в 07:51)
А добавить можно PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES UTF8' что бы проблем с кодировкой не было.


там есть charset=utf8

MYSQL_ATTR_INIT_COMMAND уже лишнеее будет, наверное, чтобы не долбить лишний раз интерпретатор, хотя по скорости вроде быстрее, спасибо
TuT (19.08.2017 в 07:14)
PhpStorm, Зачем такая конструкция?
public static function run($sql, $params = [])

{

$query = self::connect()->prepare($sql);

if (empty($params[0])) :

foreach ($params as $item => $value) :

$query->bindValue($item, $value, self::type($value));

endforeach;

else :

$i = 1;

foreach ($params as $value) :

$query->bindValue($i++, $value, self::type($value));

endforeach;

endif;

$query->execute();

return $query;

}

А почему не так.
public static function run($sql, $params = [])

{

$query = self::connect()->prepare($sql);
$query->execute($params);
return $query;

}

P.S. Не понял, вот и спрашиваю. Просьба тапками не бросать.


в ней идёт автоматом бинд параметров, проверяется массив с именованнами или без

то что Вы предложили просто обработает массив метедом execute()
________
посл. ред. 20.08.2017 в 15:23; всего 2 раз(а); by PhpStorm
Плохой приме организации синглтона. Я представляю что будет с сайтом, если я буду выполнять сразу 10-20 запросов, а то и больше)) Вообще бред если честно, зачем создавать отдельный класс для работы с классом.. Можно организовать отдельно контейнер, один раз создать экземпляр и оперировать им как душе угодно)
178396284 (20.08.2017 в 04:46)
Плохой приме организации синглтона. Я представляю что будет с сайтом, если я буду выполнять сразу 10-20 запросов, а то и больше)) Вообще бред если честно, зачем создавать отдельный класс для работы с классом.. Можно организовать отдельно контейнер, один раз создать экземпляр и оперировать им как душе угодно)


и опять же вызывать класс

Вы не поняли - суть обёртки - автоматом биндить параметры, а то что PDO - бред, то это Вы можете написать разработчикам PHP
________
посл. ред. 20.08.2017 в 06:03; всего 1 раз(а); by PhpStorm
PhpStorm (20.08.2017 в 03:09)
TuT (19.08.2017 в 07:51)
А добавить можно PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES UTF8' что бы проблем с кодировкой не было.


там есть charset=utf8

MYSQL_ATTR_INIT_COMMAND уже лишнеее будет, наверное, чтобы не долбить лишний раз интерпретатор, хотя по скорости вроде быстрее, спасибо

Сталкивался с такой проблемой, что при создании текста на кириллице выводит "вывыв" или вывод на кириллице и о этому всегда добавляю.
Да и вообще, не понимаю, зачем изобретать велосипед, когда его суть нормальные обертки в интернете
Avenax (20.08.2017 в 15:00)
Да и вообще, не понимаю, зачем изобретать велосипед, когда его суть нормальные обертки в интернете

Не понимаю суть даннго проекта, зачем держать проект с форумом, когда можно посмотреть в интернете?
Вопрос на засыпку Гг
Онлайн: 4
Время:
Gen. 0.1279
(c) Bym.Guru 2010-2025