• Как получить параметры колонки при выборки данных через SELECT?

    @Hellek Автор вопроса
    Immortal_pony: Ха ха. У меня она работает, но кривовато. Некоторые значения в массиве пустые
  • Как получить параметры колонки при выборки данных через SELECT?

    @Hellek Автор вопроса
    Не могу сообразить. information_schema лежит на одном уровне с моей БД, если я открываю GUI для управления сервером MySQL. Когда я создаю объект PDO я явно указываю к какой БД подключиться. Вы имеете в виду, что я могу создав PDO объект для myDbName, указать в запросе "SELECT name FROM anotherDbName.users" получить из неё результат (при условии, что хватает прав)?
  • Как получить параметры колонки при выборки данных через SELECT?

    @Hellek Автор вопроса
    Можете подсказать как это объединить с SELECT запросом? Сколько ни пробовал этот вариант ничего не получается. Например, для такого запроса
    'SELECT uName, uSurname, uPhone, uMail FROM users INNER JOIN contacts ON users.user_id = contacts.user_id WHERE uSurname = 'Петров' ORDER BY user_id ASC'
    В данном случае нужно получить мета информацию по 4 полям и заджойнить её с пришедшей информацией из SELECT. В селекте вернется несколько юзеров у которых фамилия "Петров".
  • Как получить параметры колонки при выборки данных через SELECT?

    @Hellek Автор вопроса
    Immortal_pony: понял почему сразу не подошел этот вариант. Объект PDO создает подключение к одной БД, а information_schema это другая БД. Как вы считаете. Что будет правильнее:
    1) При каждому запросе создавать подключение к двум БД, делать выборку, а потом сливать массивы средствами PHP.
    2) Перенести SELECT * FROM information_schema WHERE TABLE_SCHEMA = 'myDatabaseName' в мою базу данных. В таком случае будет один запрос к БД, JOIN средствами MySQL, что явно быстрее должно быть, чем слияние массивов в цикле средствами PHP.

    Второй вариант на мой взгляд правильней, но я не знаю как автоматизировать обновление этой "информационной таблицы", в случае изменения структуры базы данных. p.s. В этой таблице есть ещё пара колонок, поэтому начисто переписывать таблицу не вариант. Например, есть колонка "русское название поля".

    Вся эта история нужна для этого (псевдокод)
    echo '
    Это позволяет на клиенте лучше понимать какой тип поля, что в него можно писать, что нельзя, какая максимальная длинна и т.д.
  • Как получить параметры колонки при выборки данных через SELECT?

    @Hellek Автор вопроса
    Частично вы правы. Данная реализация может подойти. Обсуждение продолжу в другой ветке.
  • Как получить параметры колонки при выборки данных через SELECT?

    @Hellek Автор вопроса
    Сейчас схема такая
    1. Есть отдельная таблица в которой для каждого поля в этой БД созана уникальная запись
    через SHOW TABLES -> SHOW COLUMNS FROM
    2. После внесения изменений в структуру БД эта таблица обновляется (пока вручную)
    3. Далее делается полный SELECT из неё и сериализованный массив пишется в файл
    4. Во всех местах где нужно получить этот массив делается такой запрос
    $templator = unserialize(file(TEMP_DIR.'cache/templator.txt')[0]);
    5. Ну и далее по циклу для получения всей доп инфы
    foreach ($data as $k => $v) {
    if (isset($templator[$k])) {
    $data[$k] = $templator[$k];
    $data[$k]['value'] = $v;
    }
    }
    В итоге получается что-то такое (на самом деле в массиве больше данных, но сейчас это не так важно)
    'orders.order_id' => [
    'value' => '113',
    'type' => 'int',
    'length' => '11'
    ]
    6. Замерял скорость вывода массива из файла (код привел выше) vs каждый раз запроса массива из БД по всей таблице (которая сериализована в файле). Разница по скорости в 200 раз различается в пользу чтения из файла. (бд находится тут же на VDS'ке).
    7. Сам не люблю костыли, поэтому и задал изначально вопрос, есть ли расширение для PHP или нативная функция в PDO которые позволяют это всё сделать одним запросом.
    8. Как сделать join я так и не понял, но не уверен, что это будет быстрее чем моя реализация.
    Вот например по такому запросу если делать join
    SELECT "тут 15 полей" FROM "тут JOIN на 4 таблицы" и это не по 1 значению, а например 300 строк.
    То есть 300 строк на 15 полей, это нужно 4500 join'ов (нам же по каждому полю нужно получить информацию).
  • Как получить параметры колонки при выборки данных через SELECT?

    @Hellek Автор вопроса
    Евгений: Спасибо за наводку, но это не подходящий вариант. На него много ругаются, что метод с багами. Лично у меня он часть информации нулями выводит, например мах длинну строки. Видимо что-то с драйверами. На данный момент рассматриваю 2 варианта. array_merge_recursive приходящего массива от SELECT и массива хранящегося в файле, в котором есть параметры всех полей (файл заранее подготовлен, как выгрузка из базы). Второй вариант, при каждом запросе делать join со schema хотя это наверное извращение и будет медленней первого варианта.
  • Как получить параметры колонки при выборки данных через SELECT?

    @Hellek Автор вопроса
    Вы не поняли вопроса. Я знаю как получить данные столбцов. Я знаю как сделать отдельно запрос SELECT. Я хочу узнать, есть ли готовая реализация, когда при SELECT * FROM fruits, мне возвращается не только массив значений, но и информация по каждому полю, как я привел в примере. Если нужно писать функцию на php которая будет сливать "2 массива в один" я знаю как это сделать. Но будет намного быстрее, если существует уже готовая нативная функция в MySQL или PDO
  • Как получить параметры колонки при выборки данных через SELECT?

    @Hellek Автор вопроса
    Вы не поняли вопроса. Я знаю как получить данные столбцов. Я знаю как сделать отдельно запрос SELECT. Я хочу узнать, есть ли готовая реализация, когда при SELECT * FROM fruits, мне возвращается не только массив значений, но и информация по каждому полю, как я привел в примере. Если нужно писать функцию на php которая будет сливать "2 массива в один" я знаю как это сделать. Но будет намного быстрее, если существует уже готовая нативная функция в MySQL или PDO
  • Как можно ускорить скрипт подключения к БД?

    @Hellek Автор вопроса
    Юзаю openServer
    php - php7
    ОС windows на локалке / на ВПСке, где хранится бд Debian последний (8 вроде)
    БД - MySQL
    Хостинг - timeweb.ru (если важно).
  • Как можно ускорить скрипт подключения к БД?

    @Hellek Автор вопроса
    Тут localhost просто пример, на самом деле там реальный IP удаленной БД
  • Как разрешить пользователю только некоторые консольные команды?

    @Hellek Автор вопроса
    Пришел к выводу, что этот гемор весь излишний. Настроил автодеплой последней версии приложения из Bitbucket при переходе по спец. ссылке. Теперь человеку даже логиниться не надо, а у меня в свою очередь в настройках принимающего файла жестко прописаны инструкции, что нужно сделать при обращении к нему. Т.к. кроме меня ни у кого нет доступа на сервер, то сервак никак от косяков сотрудника не пострадает
  • Git pull все равно запрашивает логин/пароль (ssh настроен по мануалу)?

    @Hellek Автор вопроса
    Victor Alenkov: ОГО! Вот в этом и было дело! Всё заработало, огромное Вам спасибо, Виктор!))
    Да, я его изначально и клонировал через https, не знал даже, что из-за этого может быть подобная "блокировка"
  • Git pull все равно запрашивает логин/пароль (ssh настроен по мануалу)?

    @Hellek Автор вопроса
    Victor Alenkov: Тут Как пушить на github чтобы не вводить каждый раз логин и пароль? пишет чел pid ssh-agent'а должен быть 59566 у меня другой, хотя мне кажется не в этом причина.
    + рекомендует ssh-add ~/.ssh/id_rsa использовать, тоже сделал, ещё до предыдущего поста.
    Есть подозрение, что это как-то связано с настройками моей VPS'ки, но в чем именно не могу понять. Пакеты все установлены какие нужно, доступы и так чуть ли не везде 777 для теста сделал, владелец везде рут, тоже для теста.
  • Git pull все равно запрашивает логин/пароль (ssh настроен по мануалу)?

    @Hellek Автор вопроса
    Раньше делал -t параметр, не знал, что регистра важен, спасибо.
    Сделал всё точно так как вы и описали, вот что выдает

    authenticated via a deploy key.
    You can use git or hg to connect to Bitbucket. Shell access is disabled.

    This deploy key has read access to the following repositories:
    __myBitbucketLogin__/__myRepoName__: is_rsa -- root@58284.local

    ------------------------------------------------------------------------------------------------------------
    Проблема частично решена. Удалил ключ из "Ключей развертывания" репозитория и вписал в "ssh-ключи" в настройках своего аккаунта.
    Да! Теперь при проверке в консоли есть ответ
    logged in as myUsername.
    Но при попытке сделать гит пул от того же рута, который и создавал ssh пару ключей всё равно запрашивается логин и пароль.
    В первом случае возможен был только гит пулл, что гуд на продакшн сервере, сейчас же из него можно пушить, что уже не айс. Ну не зря же сделали ключи только для деплоя?
  • Git pull все равно запрашивает логин/пароль (ssh настроен по мануалу)?

    @Hellek Автор вопроса
    Victor Alenkov: Сделал так, все равно не работает. Не понимаю в чем дело.
    Вот что вписал в конфиг файл
    Host bitbucket.org
    IdentityFile ~/.ssh/git_rsa
    User git

    Так создавал ключи:
    cd ~/.ssh
    ssh-keygen -t rsa
    Название git_rsa

    Создаю из под рута. git pull делаю из директории которая принадлежит www-data и пул будет делать тоже www-data, хотя сейчас от рута делаю пул.

    Публичный ключ выглядит так
    ssh-rsa AAAAB3Nza ... 8jj root@58284.local
    Может перед @ не рута нужно писать, а git или www-data? И после @ писать реальный IP сервера?

    Гит пулл делаю из репозитория командой 'git pull' может параметры тут какие-то нужно добавить?
  • Git pull все равно запрашивает логин/пароль (ssh настроен по мануалу)?

    @Hellek Автор вопроса
    Victor Alenkov:
    Собственно окончание из консоли ssh -v bitbucket.org:
    You can use git or hg to connect to Bitbucket. Shell access is disabled.

    This deploy key has read access to the following repositories:

    __myLogin__/__myRepo__: --nameOfMyKey__ key -- root@58284.local
    debug1: client_input_channel_req: channel 0 rtype exit-status reply 0
    debug1: channel 0: free: client-session, nchannels 1
    Connection to bitbucket.org closed.
    Transferred: sent 2936, received 1888 bytes, in 0.3 seconds
    Bytes per second: sent 10566.2, received 6794.6
    debug1: Exit status 0

    ------------
    Host bitbucket.org github.com
    IdentityFile ~/.ssh/git_rsa
    User git
    Нужно ли для этого создавать в системе git юзера и с какими правами?
    А что на счет того, что мне нужно разместить ключи для нескольких репозиториев? Нельзя же с одним именем их все использовать или внутрь git_rsa можно несколько ключей приватных запихнуть?
  • Как разрешить пользователю только некоторые консольные команды?

    @Hellek Автор вопроса
    Хочу даже возможность обзора структуры директорий на сервере закрыть, т.к. чем больше информации об этом, тем больше риск на случай вредоносных действий. На данный момент при заходе через proftpd в свою директорию он не знает вообще что за её пределами (как я уже сказал git pull у него не робит в этом и проблема).
    Далее - www-data имеет права для записи в других директориях где лежит production копия. Подпапка сотрудника условно лежит в www/myEmployee/...
    Олег Цилюрик предложил делать это через стандартные права (rwx), но при этом варианте www-data может всё же выходить выше по древу от www директории. Ну и придётся колдовать с правами для юзеров, мол группа ввв-дата одна, а доступ к продакшен папке для тестового юзера закрыть.
    Опять же в таком случае, придётся жестко следить за правами доступа (раз в год и к закрытой папке может быть открыт доступ), а в случае с proftpd не важно какие они, человек в принципе не знает об этой папке.
    На настройку proftpd ушло около 10 минут. С варгантом/докером не работал, сколько может уйти на решение озвученной проблемы если делать это с нуля включая изучение технологии?
  • Как разрешить пользователю только некоторые консольные команды?

    @Hellek Автор вопроса
    Попробовал использовать системные команды от www-data, вроде не работают те что я называл выше. git команды вполне. Насколько будет безопасно создать для чела юзера в группе www-data, но с доп. ограничением внутри его подпапки? И можно ли как-то сделать, чтобы он не видел вышележащих директорий? Всё таки шариться там он вполне может