За последние 24 часа нас посетили 22303 программиста и 1045 роботов. Сейчас ищут 593 программиста ...

База данных mySQL - как правильно подключиться и сделать запрос?

Тема в разделе "PHP и базы данных", создана пользователем miltorg, 22 июл 2019.

Статус темы:
Закрыта.
  1. mkramer

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

    С нами с:
    20 июн 2012
    Сообщения:
    8.551
    Симпатии:
    1.754
    А я не хакер, мне не интересно ломать. Он у тебя не ломается, пока заказчик не скажет, что хочет произвольное имя...
    --- Добавлено ---
    Причём, я и не вызывался ломать. А в первом посте регулярок нету, так что там на раз-два всё ломается.
    --- Добавлено ---
    Кстати, если бы вы у меня собеседовались, и я увидел в коде переменную $familiya, на этом бы собеседование было окончено.
     
  2. miltorg

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

    С нами с:
    7 апр 2019
    Сообщения:
    375
    Симпатии:
    12
    Адрес:
    Калининград
    Резюмирую. Мой код верный и рабочий.
    А вы предлагаете написать тонны никому не нужного кода в надежде что к вам придёт д'Артаньян. Ждите и надейтесь.
     
  3. mkramer

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

    С нами с:
    20 июн 2012
    Сообщения:
    8.551
    Симпатии:
    1.754
    @miltorg, подготовленные запросы добавляют к коду одну-две строчки. Вместо твоих потенциально дохрена (по количеству полей) :)
     
  4. miltorg

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

    С нами с:
    7 апр 2019
    Сообщения:
    375
    Симпатии:
    12
    Адрес:
    Калининград
    Внимательно прочитайте первоначальный пост:

    То есть я проверяю чтоб цифры - были цифрами и пр.

    Вы правда это не видите?
    --- Добавлено ---
    Мало того, в зависимости от результата - там не просто Вася Пупкин, вася Пупкин - это просто пример.

    Вы правда это не понимаете?
     
  5. romach

    romach Старожил

    С нами с:
    26 окт 2013
    Сообщения:
    2.904
    Симпатии:
    719
    Так это и не один запрос, а 50000 запросов в рамках одной транзакции, впрочем, да, при таком раскладе mysqli исполняется быстрее, процентов аж на 15%.

    Другое дело, если чуть выпрямить руки (сам код попахивает, но чисто для примера сойдет):

    PHP:
    1. try {
    2.     $db = new PDO("mysql:host=localhost;dbname=test", "root", "");
    3.     create($db);
    4. } catch (PDOException $e) {
    5.     echo $e->getMessage();
    6. }
    7.  
    8. function create(PDO $db)
    9. {
    10.     $db->exec("TRUNCATE TABLE names");
    11.     $time = microtime(true);
    12.     $data = array('name' => 'John', 'age' => '25');
    13.     $insertStatement = $db->prepare('insert into names (name, age) values '.implode(',', array_fill(0, 50000, '(?, ?)')));
    14.     $db->beginTransaction();
    15.     $insertStatement->execute(array_merge([], ...array_fill(0, 50000, array_values($data))));
    16.     $db->commit();
    17.     echo microtime(true) - $time;
    18. }
    PHP:
    1. try {
    2.     $db = new mysqli("localhost","root","","test");
    3.     create($db);
    4. } catch (Exception $e) {
    5.     echo $e->getMessage();
    6. }
    7.  
    8. function create(mysqli $db)
    9. {
    10.     $db->query("TRUNCATE TABLE names");
    11.     $time = microtime(true);
    12.     $data = array('name' => 'John', 'age' => '33');
    13.     $insertStatement = $db->prepare('insert into names (name, age) values '.implode(',', array_fill(0, 30000, '(?, ?)')));
    14.     $db->autocommit(false);
    15.     $db->begin_transaction(MYSQLI_TRANS_START_READ_WRITE);
    16.     $insertStatement->bind_param(str_repeat('si', 30000), ...array_merge([], ...array_fill(0, 30000, array_values($data))));
    17.     $insertStatement->execute();
    18.     $db->commit();
    19.     echo microtime(true) - $time;
    20. }
    0.5 секунд, против 2.3 секунд у mysqli. Такие дела.
     
    TeslaFeo и mkramer нравится это.
  6. miltorg

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

    С нами с:
    7 апр 2019
    Сообщения:
    375
    Симпатии:
    12
    Адрес:
    Калининград
    Например если id пришло не целое число - перенаправление на статью УК о взломе ЭВМ и пр.
     
    #56 miltorg, 22 июл 2019
    Последнее редактирование: 22 июл 2019
  7. mkramer

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

    С нами с:
    20 июн 2012
    Сообщения:
    8.551
    Симпатии:
    1.754
    @miltorg, если ко мне id придёт не цифра, будет выдана 404-я ошибка. Это всё, что нужно
     
  8. romach

    romach Старожил

    С нами с:
    26 окт 2013
    Сообщения:
    2.904
    Симпатии:
    719
    Если что, я ни в коем случае не утверждаю, что одно лучше другого. Более того, я работаю с БД исключительно через ту или иную ORM и в большинстве случаев БД - это pgsql. Просто небольшой тест ради теста )
     
  9. mkramer

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

    С нами с:
    20 июн 2012
    Сообщения:
    8.551
    Симпатии:
    1.754
    Причём я же не говорю, что не нужна валидация. Но валидация не для защиты от инъекций. Валидация для проверки соответствия введённых данных техническому заданию
     
  10. miltorg

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

    С нами с:
    7 апр 2019
    Сообщения:
    375
    Симпатии:
    12
    Адрес:
    Калининград
    И? Про что вы? Я правда мысли не улавливаю. У вас какое образование?
     
  11. TeslaFeo

    TeslaFeo Старожил

    С нами с:
    9 мар 2016
    Сообщения:
    2.989
    Симпатии:
    759
    какой же ты забавный))
     
  12. miltorg

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

    С нами с:
    7 апр 2019
    Сообщения:
    375
    Симпатии:
    12
    Адрес:
    Калининград
    То есть вместо одной регулярки длиной в 10 символов, ОДНОЙ! - Вы напишите тонны кода по защите от инъекций, а потом ещё тонны кода по валидации? Объедините это всё в функции и создадите специальный класс.
    Я правильно вас понял?
     
    #62 miltorg, 22 июл 2019
    Последнее редактирование: 22 июл 2019
  13. MouseZver

    MouseZver Суперстар

    С нами с:
    1 апр 2013
    Сообщения:
    7.743
    Симпатии:
    1.319
    Адрес:
    Лень
    pdo эмулирует подготовленное выражение, на деле вышлет обычным сигналом/запросом. Поэтому при больших кол-вах данных информация может исказиться в пользу другого инструмента. Отключи эмулирование в PDO чтобы слал настоящие подготовленные запросы.

    Теоретически/логически - это так. В практике не проверял, так что могу ошибиться.
     
  14. romach

    romach Старожил

    С нами с:
    26 окт 2013
    Сообщения:
    2.904
    Симпатии:
    719
    Помнится в одном проекте был файлик, где регулярных выражений было несколько сотен, при чем каждое - большая такая и длинная строка. Человек их написавший, пожалуй единственный кто знал регулярные выражения на самом деле из тех кто мне знаком ))

    Ну, лично я напишу примерно вот так:
    PHP:
    1. public function create(Request $request)
    2. {
    3.   $this->validate($request, [
    4.     'title' => 'required|string|unique:posts,title',
    5.     'content' => 'required|string'
    6.   ]);
    7.   $post = Post::create($request->only('title', 'content'));
    8.  
    9.   return  new PostResuorce($post);
    10. }
    И это таки будет работать, при чем довольно гибко и правильно ))
     
  15. miltorg

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

    С нами с:
    7 апр 2019
    Сообщения:
    375
    Симпатии:
    12
    Адрес:
    Калининград
    Напишите пожалуйста полный код применительно к вышеизложенному заданию - тогда можно будет что-то сравнить. И чтоб можно было понять всю гениальность гибкости и правильности
     
  16. romach

    romach Старожил

    С нами с:
    26 окт 2013
    Сообщения:
    2.904
    Симпатии:
    719
    Лень ) Но в целом, думаю, что так оно и есть, а так же что в реальном таске стоимость использования PDO по сравнению с временем выполнения приложения / запроса не существенна, за небольшим рядом исключений. Потому лучше использовать то что подходит под таск.
    --- Добавлено ---
    Так вот он, валидирует, создает, отдает ресурс. Примерно так я бы это и написал, если выкинуть бизнес-логику и те или иные требования по проекту.
     
  17. miltorg

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

    С нами с:
    7 апр 2019
    Сообщения:
    375
    Симпатии:
    12
    Адрес:
    Калининград
    Понятно. - Кода не будет. Бизнес-логика мешает. Понятно, чё.
     
  18. mkramer

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

    С нами с:
    20 июн 2012
    Сообщения:
    8.551
    Симпатии:
    1.754
    Для защиты от инъекций не нужно тонны кода - достаточно подготовленного запроса в 3-4 строчки. А валидация - ну я не знаю, сколько будет строчек, и будут ли вообще, зависит от ТЗ.

    А это был у @romach полный код, только на фреймворке. Фреймворк всё, что необходимо сделает, для этого их и придумали
    --- Добавлено ---
    И в большинстве моих проектов этот момент выглядит точно так же :)
     
  19. miltorg

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

    С нами с:
    7 апр 2019
    Сообщения:
    375
    Симпатии:
    12
    Адрес:
    Калининград
    Во как надо - Мой Дартаньян уже превратился в бизнес-проект. - Хочу дивиденды! :)
    --- Добавлено ---
    Круть. То есть вместо регулярки в 10 символов вы подключаете не просто класс, а Фреймворк! Круть.
     
  20. mkramer

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

    С нами с:
    20 июн 2012
    Сообщения:
    8.551
    Симпатии:
    1.754
    Ну у меня проект обычно реализует больше, чем одну форму для ввода имени, поэтому да, подключаю :) И это даёт мне роутинг, защиту от csrf, защиту от брутфорса и ещё кучу всяких плюшек, пользуйся не хочу.

    На самом деле, даже для маленьких проектов в две-три формы (такие тоже бывают) я сейчас обычно подключаю микрофреймворк Slim ради роутинга нормального. А что, большая проблема подключить фреймворк?
     
  21. romach

    romach Старожил

    С нами с:
    26 окт 2013
    Сообщения:
    2.904
    Симпатии:
    719
    Бизнес-логика — в разработке информационных систем — совокупность правил, принципов, зависимостей поведения объектов предметной области. Вики.

    Более того, в рамках проекта их может быть несколько )
     
  22. miltorg

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

    С нами с:
    7 апр 2019
    Сообщения:
    375
    Симпатии:
    12
    Адрес:
    Калининград
    Вместо регулярки в 10 символов?
    Ну это как ... - копать ямку в детской песочнице бульдозером.
     
  23. villiwalla

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

    С нами с:
    14 дек 2016
    Сообщения:
    471
    Симпатии:
    70
  24. miltorg

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

    С нами с:
    7 апр 2019
    Сообщения:
    375
    Симпатии:
    12
    Адрес:
    Калининград
    Словоблудие. Вы не гуммуууниталий случаем?
     
  25. mkramer

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

    С нами с:
    20 июн 2012
    Сообщения:
    8.551
    Симпатии:
    1.754
    @miltorg, почему вместо? У тебя что, в проекте ничего кроме одной формы нету? Там всякие личные кабинеты, оплаты и прочее и прочее. А в случае со Slim, кстати, он ORM не содержит, и пишу через PDO подготовленные запросы, как тебе показали.
     
Статус темы:
Закрыта.