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

> Не до конца работает PDO
maximka787  
 ۩  [x] Дата
Цитировать сообщение

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



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

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




Мужики, здарова. Перешел на PDO, но никак не пойму, как наименьшими потерями перейти к нему в одном проекте.

Там функциональный кодинг. Каждая часть сайта это отдельная функция. Все б ничего, но создав объект PDO его не видно внутри.

$db = new PDO('mysql:host=localhost;dbname=test', 'root', '');
$db->query("SET NAMES 'utf8'");

$stmt = $db->query('SELECT `id`, `name` FROM `users` LIMIT 10');

$a = array();
while($row = $stmt->fetch())
{
$a[$row['id']] = $row['text'];
}
print_r($a);



/* 1 */

function func1()
{
$stmt = $db->query('SELECT * FROM `mh_logs` LIMIT 10');
}

func1();




/* 2 */

$stmt = $db->prepare("INSERT INTO `users` (`email`, `password`) values (:email, :password)");

$stmt->execute(array('email' => 'test@test.ru', 'password' => '12345'));

echo 'Добавлена: '.$stmt->rowCount().' запись';



$db = null;


Собственно два вопроса:
1) Можно ли сделать $_GLOBALS['db'] вместо $db и грозит ли это чем-нибудь плохим?
2) Часть кода "2", полностью защищена от инъекций, или какой-то проверки не хватает?


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

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



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

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




По второму не так написал.

$stmt->execute(array('email' => $_POST['email'], 'password' => $_POST['password']));


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

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



146%
******

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




maximka787
function func1()
{
global $db;
$stmt = $db->query('SELECT * FROM `mh_logs` LIMIT 10');
}


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

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



c начала 2017 года в Новосибирске.
******

Профиль
Журнал
Группа: ★ЛжеЭксперт★
Завсегдатай форума
Сообщений: 26457
Пользователь №: 21350
На форуме: 7 лет, 5 месяцев, 5 дней
Карма: 739




Цитата
global $db;

пздц. 2017 год. приехали.

про аргументы мы не слышали... нет.


--------------------
HTML, CSS (Bootstrap), JS(JQuery, ExtJS), PHP, MySQL, MSSql (TSql, BI OLAP, MDX), Git, SVN, CodeIgnater, Yii 2, JiRA, Redmine, Bitbucket, Composer
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
Arh  
Дата
Цитировать сообщение

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



146%
******

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




Игорь_Vasinsky
Про что?


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

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



c начала 2017 года в Новосибирске.
******

Профиль
Журнал
Группа: ★ЛжеЭксперт★
Завсегдатай форума
Сообщений: 26457
Пользователь №: 21350
На форуме: 7 лет, 5 месяцев, 5 дней
Карма: 739




Arh
я в цитату твой кусок кода выделил.


--------------------
HTML, CSS (Bootstrap), JS(JQuery, ExtJS), PHP, MySQL, MSSql (TSql, BI OLAP, MDX), Git, SVN, CodeIgnater, Yii 2, JiRA, Redmine, Bitbucket, Composer
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
Invis1ble  
Дата
Цитировать сообщение

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




******

Профиль
Группа: Эксперт
Группа переписки
Сообщений: 11976
Пользователь №: 23195
На форуме: 7 лет, 25 дней
Карма: 436

Трезвый :
7 лет, 11 месяцев, 25 дней


Цитата (maximka787 @ 6.02.2017 - 17:17)
Там функциональный кодинг.

У тебя во фразе "императивный говнокод" слишком много ошибок.


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

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



c начала 2017 года в Новосибирске.
******

Профиль
Журнал
Группа: ★ЛжеЭксперт★
Завсегдатай форума
Сообщений: 26457
Пользователь №: 21350
На форуме: 7 лет, 5 месяцев, 5 дней
Карма: 739




я вот ни как не пойму, вот сколько встречаю - PDO, ну вы же как бы видите и наверни ка понимаете что работаете с объектом, а объект это результат работы класса

в чём трудность написания класса обёртки - примитивного - с использованием наследования или паттерна DI ?

всё же довольно примитивно там ну что вы всё это пытаетесь в функции натолкать то?

не ужели нет желания развиваться?


--------------------
HTML, CSS (Bootstrap), JS(JQuery, ExtJS), PHP, MySQL, MSSql (TSql, BI OLAP, MDX), Git, SVN, CodeIgnater, Yii 2, JiRA, Redmine, Bitbucket, Composer
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
maximka787  
 ۩  Дата
Цитировать сообщение

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



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

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




Понимаете, есть проект уже рабочий. В нем много уже всего написано. Дали задание заменить драйвер mysql на pdo. Без сильной переделки всех скриптов.

Я правильно понял, что надо создать синглтон и также объявлять новый объект в каждой функции? Просто от них не уйти, ибо их около 120-150 штук в проекте.

И чем $GLOBALS плоха в конкретном примере?


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

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



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

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




Можно конечно передавать объект db в аргументы функции, но это жесткач будет. Хотя так все работает. Я незря привел именно такой, простой пример кода в стартпосте.


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

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



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

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




Цитата (Invis1ble @ 6.02.2017 - 14:54)
Цитата (maximka787 @ 6.02.2017 - 17:17)
Там функциональный кодинг.

У тебя во фразе "императивный говнокод" слишком много ошибок.

Где у меня много ошибок? Проверил код, нет там ошибок. Или это образно?


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

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



c начала 2017 года в Новосибирске.
******

Профиль
Журнал
Группа: ★ЛжеЭксперт★
Завсегдатай форума
Сообщений: 26457
Пользователь №: 21350
На форуме: 7 лет, 5 месяцев, 5 дней
Карма: 739




какой смысл говорить в 100501 раз о вреде global ?
канешь, раз пишешь в говнокоде - пиши говнокодом, зачем что-то стараться исправить?

Цитата
ожно конечно передавать объект db в аргументы функции, но это жесткач будет.

ну да, аргументы для функции это жесткач, а return - вообще вселенское зло, всегда делайте echo вместо return.


--------------------
HTML, CSS (Bootstrap), JS(JQuery, ExtJS), PHP, MySQL, MSSql (TSql, BI OLAP, MDX), Git, SVN, CodeIgnater, Yii 2, JiRA, Redmine, Bitbucket, Composer
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
maximka787  
 ۩  Дата
Цитировать сообщение

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



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

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




Цитата (Игорь_Vasinsky @ 7.02.2017 - 05:24)
ну да, аргументы для функции это жесткач, а return - вообще вселенское зло, всегда делайте echo вместо return.

Меня тоже бесит, когда в функции нет return)

У меня вложенность функций бывает 1 до 3х уровнев в среднем. Можно передавать объект бд, в аргумент, но я такое редко видел. В основном синглтоном делают бд и все. Что щас и попробую. Скину код.


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

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



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

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




ГОТОВО!
Посмотрите пожалуйста, все верно сделал?

class DB
{
protected static $db = null;

public function __construct(){}
public function __clone(){}

public static function instance()
{
if(self::$db === null)
{
self::$db = new PDO('mysql:host=localhost;dbname=test','root','');

self::$db->exec("SET NAMES utf8");
}

return self::$db;
}

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

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



$stmt = DB::instance(); //вводим один раз

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

$a = array();

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


print_r($a);


function func1()
{
$a = array();

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

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


return $a;
}

print_r(func1());


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

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



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

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




Мужики, посмотрите пожалуйста. А то я щас натворю делов


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

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

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