За последние 24 часа нас посетили 21512 программистов и 1023 робота. Сейчас ищут 829 программистов ...

PDO

Тема в разделе "PHP для новичков", создана пользователем Andrey2010, 20 июн 2019.

  1. Andrey2010

    Andrey2010 Новичок

    С нами с:
    5 ноя 2016
    Сообщения:
    4
    Симпатии:
    0
    Доброго времени суток помогите пожалуйста кто не будь если не сложно, создал функцию connect

    в этой функции хочу подключить файл config.php но подключения нет, где я допустил ошибку?
    PHP:
    1. <?php
    2.     Class Database{
    3.     private $link;
    4.  
    5.     public function __сonstruct()
    6. {
    7.     $this->connect();
    8. }
    9.  
    10. private function connect()
    11.  
    12. {
    13.  
    14. $config = require_once 'config.php';
    15.  
    16.  
    17. $dsn = 'mysql:host='.$config['host'].';dbname='.$config['db_name'].';charset='.$config['charset'];
    18.  
    19. $this->link = new PDO($dsn, $config['username'],$config['password']);
    20.  
    21. return $this;
    22. }
    23. // Выполняет запрос
    24. public function execute($sql)
    25. {
    26. $sth = $this->link->prepare($sql);
    27.  
    28.    return $sth->execute();
    29. }
    30.  
    31. // Получает запрос
    32. public function query($sql)
    33. {
    34. $sth = $this->link->prepare($sql);
    35. $sth->execute();
    36.  
    37.  
    38. $result =$sth->fetchAll(PDO::FETCH_ASSOC);
    39.  
    40. if($result === false){
    41. return[];
    42.  
    43. }
    44. return $result;
    45. }
    46.  
    47.  
    48.  
    49. public function setLink($link)
    50. {
    51. $this->link = $link;
    52. return $this;
    53. }
    54.  
    55. }
    56.  
    57. $db = new Database();
    58.  
    59.  
    60.  
    61.  
    62.  
    63. ?>
     
    #1 Andrey2010, 20 июн 2019
    Последнее редактирование модератором: 20 июн 2019
  2. Artur_hopf

    Artur_hopf Активный пользователь

    С нами с:
    7 май 2018
    Сообщения:
    2.266
    Симпатии:
    405
  3. Andrey2010

    Andrey2010 Новичок

    С нами с:
    5 ноя 2016
    Сообщения:
    4
    Симпатии:
    0
    Вот config.php


    <?php

    return [
    'host' => 'localhost',
    'db_name' => 'test',
    'username' => 'root',
    'password' => ' ',
    'charset' => 'utf8'

    ];
     
  4. Andrey2010

    Andrey2010 Новичок

    С нами с:
    5 ноя 2016
    Сообщения:
    4
    Симпатии:
    0
    Мне кажется дело не в фале config.php.

    Так как меняешь название файла на любое другое в браузере нет предупреждения что такого файла не существует.
     
  5. mkramer

    mkramer Суперстар
    Команда форума Модератор

    С нами с:
    20 июн 2012
    Сообщения:
    8.553
    Симпатии:
    1.754
    Приведи точно ошибку. В коде бред. От такого использования prepare толку 0
     
  6. Павел Голубцов

    Павел Голубцов Активный пользователь

    С нами с:
    4 мар 2019
    Сообщения:
    183
    Симпатии:
    4
    PHP:
    1. <?php
    2. namespace My\Database;
    3. Class Datab
    4. {
    5.  
    6.     private $link;
    7.  
    8.     public function __construct()
    9.     {
    10.         $this->connect();
    11.     }
    12.  
    13.     private function connect()
    14.     {
    15.         $config = require_once 'config.php';
    16.         $dsn = 'mysql:host=' . $config['host'] . ';dbname=' . $config['db_name'] . ';charset=' . $config['charset'];
    17.         $this->link = new \PDO($dsn, $config['username'], $config['password']);
    18.         return $this;
    19.     }
    20.  
    21.     public function execute($sql, $array)
    22.     {
    23.         $sth = $this->link->prepare($sql);
    24.         return $sth->execute($array);
    25.     }
    26.  
    27.     public function query($sql, $array)
    28.     {
    29.         $sth = $this->link->prepare($sql);
    30.         $sth->execute($array);
    31.         $result = $sth->fetchAll(\PDO::FETCH_ASSOC);
    32.         return $result;
    33.     }
    34. }
    Файл config.php должен лежать в той же папке.

    Вызываем где нам надо
    PHP:
    1. <?php
    2. use My\Database\Datab;
    3. $db = new Datab();
    @mkramer От такого использования prepare толку 0
    А так?
     
    #6 Павел Голубцов, 22 июн 2019
    Последнее редактирование: 22 июн 2019
  7. Andrey2010

    Andrey2010 Новичок

    С нами с:
    5 ноя 2016
    Сообщения:
    4
    Симпатии:
    0
    Спасибо, что откликнулись, всё разобрался можно тему закрыть :).
     
  8. mkramer

    mkramer Суперстар
    Команда форума Модератор

    С нами с:
    20 июн 2012
    Сообщения:
    8.553
    Симпатии:
    1.754
    От prepare есть толк только когда есть подстановки
     
  9. MouseZver

    MouseZver Суперстар

    С нами с:
    1 апр 2013
    Сообщения:
    7.748
    Симпатии:
    1.321
    Адрес:
    Лень
    PHP:
    1. <?php
    2.  
    3. namespace My\Database;
    4.  
    5. class Datab
    6. {
    7.    protected static $instance;
    8.    protected $link;
    9.  
    10.    protected static function instance()
    11.    {
    12.      return static :: $instance ?: ( static :: $instance = ( new static ) -> connect( include 'config.php' ) );
    13.    }
    14.  
    15.    protected function connect( array $conf ): Datab
    16.    {
    17.      $this -> link = new \PDO( sprintf ( 'mysql:host=%s;dbname=%s;charset=%s', $conf['host'], $conf['db_name'], $conf['charset'] ),
    18.        $conf['username'], $conf['password'] );
    19.    
    20.      return $this;
    21.    }
    22.  
    23.    public static function prepare( string $sql, array $array )
    24.    {
    25.      $s = static :: instance() -> link -> prepare( $sql );
    26.    
    27.      $s -> execute( $array );
    28.    
    29.      return $s;
    30.    }
    31.  
    32.    public static function query( string $sql )
    33.    {
    34.      return static :: instance() -> link -> query( $sql );
    35.    }
    36. }
    PHP:
    1. Datab :: prepare( 'SELECT * FROM table WHERE name = ?', [ $_POST['name'] ?: '' ] ) -> rowCount();
    --- Добавлено ---
    Глаза радуются ?
     
    #9 MouseZver, 23 июн 2019
    Последнее редактирование: 23 июн 2019
    _ne_scaju_ нравится это.
  10. Павел Голубцов

    Павел Голубцов Активный пользователь

    С нами с:
    4 мар 2019
    Сообщения:
    183
    Симпатии:
    4
    массив $array в return$sth->execute($array); не подстановка, в подготовленном запросе?
     
  11. ElisDN

    ElisDN Активный пользователь

    С нами с:
    13 фев 2018
    Сообщения:
    605
    Симпатии:
    130
    Не радуются.
     
  12. Valick

    Valick Активный пользователь

    С нами с:
    12 авг 2018
    Сообщения:
    1.911
    Симпатии:
    328
    Пушто ты очкарик вот и не доходит радость до глаз.
     
  13. ElisDN

    ElisDN Активный пользователь

    С нами с:
    13 фев 2018
    Сообщения:
    605
    Симпатии:
    130
    Да, солнышко, вы здесь внезапно правы. Не доходит уже ультрафиолетовый блеск нетестируемых синглтонов с лапшекодным смешением ответственностей до моих очей. Ибо иначе бы ввергло меня в пучину нерадивых деяний и нелицеприятных грёз.
     
  14. Valick

    Valick Активный пользователь

    С нами с:
    12 авг 2018
    Сообщения:
    1.911
    Симпатии:
    328
    @ElisDN, деяний и так пока не видно, сплошное бла бла бла направленное на восхваление себя любимого по средствам уничижения всех и вся. Где же код, который если уж не радует, то хотя бы не колет твой глаз?
    Опять же не стоит забывать, что подавляющее число вопросов на этом форуме от начинающих программистов и отвечать следует пропорционально их знаниям. Смогёшь?
     
  15. MouseZver

    MouseZver Суперстар

    С нами с:
    1 апр 2013
    Сообщения:
    7.748
    Симпатии:
    1.321
    Адрес:
    Лень
    Причем здесь крупные проекты ?
    --- Добавлено ---
    У класса внутреннее создание экземпляра. Последующие вызовы методов, будет использоваться существующий внутренний объект
    --- Добавлено ---
    Причем выделюсь, создается и загружается ядро тогда, когда это потребуется и начнется использоваться в самом коде, а не как во всех фреймворках - сначала загружается синглтон ( ядро/подключение к базе/проверка чего прочего основ ) и потом, возможно, наверно этот экземпляр будет использоваться.
     
  16. Дюран

    Дюран Активный пользователь

    С нами с:
    9 мар 2018
    Сообщения:
    256
    Симпатии:
    19
    А что тестируемый код с хорошей архитектурой нужен только на "крупных" проектах?
     
  17. MouseZver

    MouseZver Суперстар

    С нами с:
    1 апр 2013
    Сообщения:
    7.748
    Симпатии:
    1.321
    Адрес:
    Лень
    Напиши сюда, для данной темы с его проблемами, свой тестируемый код с хорошей архитектурой

    Я жду, либо свободен. Надоели глупые вопросы без осознанных всех нюансов.
     
  18. Дюран

    Дюран Активный пользователь

    С нами с:
    9 мар 2018
    Сообщения:
    256
    Симпатии:
    19
    Т.е. от моего вопроса ты слился и еще что то требовать посмел...
    Если пишешь как 10 лет назад все новички писали, на процедурке, статикой в классах, так кому ты интересен как собеседник?
     
  19. MouseZver

    MouseZver Суперстар

    С нами с:
    1 апр 2013
    Сообщения:
    7.748
    Симпатии:
    1.321
    Адрес:
    Лень
    Твой глупый вопрос с дальнейшим ветвлением диалогов, где нужно расписывать и что - то доказывать, был опущен с учетом конкретного актуального диалога и его кода ( которого я оптимизировал обвертку с глобальной доступностью - ответ и на вторую строку. ).

    Теперь все понятно и выложишь свой правильный код или продолжишь, что в итоге тебя легче в игнор внести ?
    --- Добавлено ---
    Я признаю свои ошибки, если показывают пример на практике "своего деяния" - иначе пафос трепа и только.
     
  20. ElisDN

    ElisDN Активный пользователь

    С нами с:
    13 фев 2018
    Сообщения:
    605
    Симпатии:
    130
  21. Valick

    Valick Активный пользователь

    С нами с:
    12 авг 2018
    Сообщения:
    1.911
    Симпатии:
    328
    @ElisDN, конкретно в этой теме ты сказал, что синглтоны говно, вот я и спрашиваю "где твой код?"
     
  22. askanim

    askanim Старожил

    С нами с:
    7 апр 2016
    Сообщения:
    2.201
    Симпатии:
    166
    Адрес:
    GABRIEL
    @ElisDN , @Valick Идеального кода не бывает. Приципиться можно до любого кода. Даже если зайти в рабочий гит профессионала.
     
  23. Дюран

    Дюран Активный пользователь

    С нами с:
    9 мар 2018
    Сообщения:
    256
    Симпатии:
    19
    Вас что в гугле забанили? У Дмитрия куча репозитариев на гитхабе, смотри не хочу "его код".

    А насчет Синглтонов, это не они плохие, а вот эти Синглтоны на статике. Глобальная зависимость, что тут непонятного.
    Даже в любимой книге всех пхп новичков, автор Мэтт Зандсатра, про это черным по белому.
    Вы, Valick, так любите на всех площадках людей попрекать тем что они книг не читают, вот не ожидал что Мэтта вы не читали...
     
  24. Valick

    Valick Активный пользователь

    С нами с:
    12 авг 2018
    Сообщения:
    1.911
    Симпатии:
    328
    @Дюран, вам сделать фотку на фоне 4-го издания этой книги?
    В том то и дело, что я попрекаю, только тех кто сам попрекает причём чаще всего голословно, всем остальным просто советую читать книги и не верить на слово ни мне ни кому бы то ни было, а самому своим умом делать выводы на основе прочитанного. Конкретно в данной теме @ElisDN выказал своё "фи", вот я и спросил "где его не "фи" код", а ходить по гитхабам и копаться в чужом "грязном белье" у меня банально нет времени.
     
  25. askanim

    askanim Старожил

    С нами с:
    7 апр 2016
    Сообщения:
    2.201
    Симпатии:
    166
    Адрес:
    GABRIEL
    Дет сад.