Задать вопрос
  • Как использовать PDO в других классах?

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    Вопрос хороший и правильный. Всё остальное - не очень.
    К сожалению, то что у тебя сейчас - это тоже говнокод и неправильно.

    Тут надо понимать одну очень простую, но очень неприятную вещь: ООП, в отличие от ПХП - это сложная тема. Явочным порядком, там подглядев, тут скопипастив - ООП изучить нельзя.
    Максимум что у тебя получится - это та же процедурщина, вид сбоку. Неподдерживаемый говнокод, просто по-обезьяньи обернутый в классы.

    Но учиться все равно надо.
    Главное что надо понимать про ООП - оно не про сами классы, а про их взаимодействие.
    именно поэтому то самое жлобал и является говнокодом. Потому что никакого взаимодействия нет ,и класса тоже нет - есть функция, которую если вынуть из класса, то НИЧЕГО не изменится.

    Но и то что у тебя сейчас - это не ООП.
    Каждый раз создавать новое подключение можно и без всякого ООП. Вот только оно убьёт тебе сервер БД.
    Чтобы было ООП, надо передать уже созданный инстанс класса для работы с БД как параметр конструктора.

    Кроме того, класс qpdo - это какой-то анекдот, бессмыслица. Обезьяна увидела как человек носит очки, напялила на нос ложку и ходит с гордым видом. Внешне вроде то же самое, но смысла никакого.
    Ты можешь объяснить, ЗАЧЕМ тебе класс qpdo? Чтобы настройки прописать? А ты подумал что настройки бывают РАЗНЫЕ? Что дома у тебя логин рут и пароль пустота, а на хостинге это не прокатит. И что - будешь код переписывать, каждый раз заливая из дома на сервер? Серьёзно?
    Настройки должны всегда лежать отдельно. А больше ни для чего твой класс не нужен.

    Поэтому,

    1. qpdo выкинуть на помойку, по крайней мере до тех пор, пока не поймешь, для чего тебе свой класс, и как с ним обращаться.
    2. Создать один раз инстанс класса для работы с БД (в простейшем случае - PDO) и передавать в другие классы через констркутор
    3. в конструкторе присваивать его переменной класса, которую использовать для доступа к БД.

    В итоге возвращаемся к исходному вопросу, как передать соединение в другой класс:
    class somethingClass {
      function __construct($db) {
        $this->db = $db;
      }
    
      function somethingFunction(string $key) {
        $query = $this->db->prepare("SELECT `key` FROM `table` WHERE `key` = :key");
        $query->execute(array(':key' => $key));
        return $query->fetchColumn();
      }
    }


    Бонус
    echo 'Ошибка подключения к БД MySQL: ' . $error->getMessage() . ''; die;
    - это ад и говнокод.
    Да, в прошлом веке так писали. С тех про прошло уже 20 чертовых лет. 20, Карл! Тебя небось еще в проекте не было.
    Сайт, который вываливает вот это всё на всеобщее обозрение - это позор.
    Все ошибки сайт должен всегда держать при себе. И никому не показывать. И поэтому никогда не надо лезть руками в ту ошибку, которую выбрасывает РНР. Надо дать ей спокойно пойти туда, куда идут все остальные ошибки.
    Ответ написан
    Комментировать
  • Почему bash не добаляет значение к массиву внутри цикла?

    @voleg4u
    http://www.voleg.info/
    В баше while совершенно не встроенная функция. Она вызывает fork, и поэтому все остальное выполняется в sub-shell. Заставить вразумительно работать while нереально.
    Ответ написан
    2 комментария
  • Почему значения меняются?

    @res2001
    Developer, ex-admin
    Потому что массив так нельзя вернуть из функции. Сейчас вы просто возвращаете указатель. Пока указатель находится в функции getMas он действительно указывает на массив. Как-только вы вышли из getMas стек схлопнулся (ваш массив находится на стеке) и память, где раньше лежал массив стала не действительной.
    После вызова первого printf, та же память на стеке, которую когда-то занимал ваш массив выделилась под нужды printf, и printf заполнила эту память чем-то своим, поэтому в третьем printf у вас фигня.
    Программа у вас не вываливается с ошибкой, потому что в стеке память всегда выделена. "Схлопывание стека" - это просто уменьшение/увеличение регистра указателя на стек.

    У вас есть 2 вариант.
    1. Простой - выделить массив в main, передать его в getMas. Из getMas уже можете ничего не возвращать, только заполняете там массив.
    2. Выделяете динамический массив в getMas с помощью malloc. В main не забудьте освободить память, выделенную для массива. Это плохой вариант, т.к. память выделяется на одном уровне программы, а освобождается на другом. Но в вашей простой задаче можно пока на это не обращать внимания.
    Ответ написан
    Комментировать
  • Зачем требуются различные СУБД, если можно использовать структуры данных языка, например словари и списки в питоне?

    sergey-gornostaev
    @sergey-gornostaev
    Седой и строгий
    Если на структурах языка реализовать весь набор функций, предоставляемых СУБД, то получится новая СУБД. Зачем тратить время и силы на написание СУБД, если есть уже готовые?
    Ответ написан
    Комментировать
  • Как парсить сайты защищенные CloudFront?

    @alpeg
    Обход кеша целиком и полностью зависит от настроек сайта, тут без экспериментов не разобраться.
    Пробуйте перебирать заголовки, GET-параметры, Сookie.
    Рекомендую почитать документацию самого CloudFront, особенно разделы про Query String Parameters, Cookies и Request Headers.
    Ответ написан
    Комментировать
  • Нужно рассчитать IP адрес для следующей сети. Всё верно?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    10101100.00010010.10111100.0010|0000 (Network ID)
    +
    00000000.00000000.00000000.0001|0000
    =
    172.18.188.48 (next IP address)

    Всё ли верно я сделала???

    Да.
    Ответ написан
    1 комментарий
  • Не работает рестарт nginx?

    @Samuel_Leonardo
    из лога видно что ругается на вызов kill, скорее всего проблема в параметрах,
    но сама ошибка у вас не влезла в вывод

    посмотрите полный лог, например, через
    #journalctl -xe

    ну и проверьте файл конфигурации сервиса, там поидее должно быть
    ExecReload=/bin/kill -s HUP $MAINPID
    Ответ написан
    Комментировать
  • Как сделать, чтоб при вставки команды в терминал, она не запускалась автоматически сразу сама?

    Zoominger
    @Zoominger
    System Integrator
    Копируйте так, чтобы не зацепить следующую строку, потому что при этом копируется невидимый символ перевода а-ля "\n".
    Ответ написан
    Комментировать
  • Как установить идентичное время на сервере и клиенте?

    Melkij
    @Melkij
    DBA Team для вашего PostgreSQL?
    Включить и настроить NTP на единый источник времени.
    Если ОС клиента вам не подконтрольна - то вы не можете рассчитывать на то, что часы на клиенте и сервере совпадают и должны придумывать как с этим жить вашему приложению.
    Ответ написан
  • Как убрать лишнее из вывода команды?

    @dodo512
    grep -oP '^[a-z]+(-[a-z]+)*'

    grep -oP '^.+?(?=-\d|$)'

    sed 's/-[0-9].*//'
    Ответ написан
    2 комментария
  • Запрет одному из сайтов полностью грузить сервер, как?

    Sanes
    @Sanes
    Что именно грузит? Cgroups может помочь. Можно некоторые ограничения для MySQL пользователя сделать.
    Если нагрузка легальная, то ограничения вам не помогут. Ищите источник.
    Ответ написан
    3 комментария
  • Как установить PostgreSQL 11.5 на Ubuntu Server?

    Melkij
    @Melkij
    DBA Team для вашего PostgreSQL?
    Вам не нужна именно 11.5. Ставьте актуальный minor - 11.8 или в четверг это уже будет 11.9.

    Там, где действительно нужен конкретный минор для каких-то невнятных целей, задачу не поручат нулевому студенту, а будет, например, собственный внутренний репозиторий с нужными собранными пакетами.

    Minor релизы postgresql содержат только исправления ошибок и безопасности. Искать давно исправленные ошибки не самое полезное что можно придумать.
    Ответ написан
    3 комментария
  • Как запретить А запись в DNS сервере windows?

    SignFinder
    @SignFinder
    Wintel\Unix Engineer\DevOps
    Выключить регистрацию в DNS в свойствах сетевого адаптера и создать руками нужные статические записи.
    Ответ написан
    6 комментариев
  • Как правильно экранировать символы $ и ' при передаче их в ansible shell?

    saboteur_kiev
    @saboteur_kiev Куратор тега Linux
    software engineer
    Почитать документацию шелла по кавычкам.

    Вкратце:
    1. Внутри одинарных кавычек ВСЕ символы теряют свое специальное значение. Включая backslash, поэтому
    'STRING1\'STRING2'
    - это не экранированная одинарная кавычка в кавычках, а строка STRING1\ в одинарных кавычках потом STRING2 без кавычек, а потом еще одна открывающая одинарная кавычка, которая незакрыта.
    Можно делать так:
    'STRING1'\''STRING2'

    2. Внутри двойных кавычек, все символы теряют свое специальное значение кроме $, backslash и обратных одинарных кавычек. Примеры:
    "${VARIABLE} \${VARIABLE} $(hostname) `hostname`"
    значение VARIABLE, строка ${VARIABLE} которая раскроется позже, дважды результат команды hostname вызванный разными способами
    Ответ написан
    Комментировать
  • Не отображаются файлы в папке Windows, но файлы есть?

    Jump
    @Jump
    Системный администратор со стажем.
    Не видно - значит атрибут скрытый или системный стоит.
    Так же возможно на уровне прав запрет стоит на просмотр содержимого директории.
    Ответ написан
  • Postgresql сломалась репликаци знаю причины не знаю как поченить стэндбай?

    Melkij
    @Melkij
    DBA Team для вашего PostgreSQL?
    скопировать с мастера папку pg_wal с файлами

    Если бы нужный сегмент на primary был - его бы уже давно отдали реплике по запросу walreceiver'а. Значит его там нет.
    Если у вас на какой-то из реплик все необходимые wal всё же есть - да, их можно подложить в pg_wal. База их в своём обычном цикле опроса источников wal увидит. Или переключить primary_conninfo на эту реплику, сама заберёт.

    Которая в свою очередь лочит базу

    basebackup не блокирует базу. Это вообще весьма простая и глупая по своей сути штука.

    Чтобы реплика при отсутствии необходимых WAL догнала primary - вам нужно знание внутренностей PGDATA. Которого у вас нет, что очевидно по вопросу "не станет ли слейв после этого мастером ?". А потому единственным простым и надёжным способом будет сделать pg_basebackup заново.
    Ответ написан
    Комментировать
  • Как исправить ошибку скрипт bash?

    xotkot
    @xotkot
    ответы это убийцы вопросов
    выполните перед запуском скрипта
    dos2unix СКРИПТ
    уберёт все проблемы которые могут возникнуть при работе со скриптом из под винды

    п.с.
    точка с запятой(;) это лишнее если вы не выполняете в одной строке несколько команд подряд.
    Путь к файлу/директории в котором есть переменная лучше брать в двойные(") кавычки, а то если в переменную вдруг попадёт значение с пробелом то выйдет казус
    да и дублирование лучше уменьшить:
    echo "Write your domain without http and www:"
    read sitedomain
    DIR="/var/www/$sitedomain"
    sudo mkdir -p "$DIR/public_html"
    echo "Hello world" > "$DIR/public_html/index.html"
    Ответ написан
    Комментировать
  • Регулярка на url с user_id?

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    /^\/info\/[a-zA-Z0-9_]+$/.test(url)
    Ответ написан
    Комментировать
  • Ошибка при скачивании программы, как исправить?

    @antonwx
    Пойти в эту папку и проверить, есть ли там права нужные. В идеале отменить установку полностью, удалить папку Adobe и установить заново. И перестать пользоваться сборками от васянов.
    Ответ написан
    Комментировать
  • Как я могу исправить плохие сектора на жестком диске?

    saboteur_kiev
    @saboteur_kiev
    software engineer
    bad sectors - это обычно физическое повреждение секторов на диске.
    Исправить это невозможно.

    То-есть из-за этой программы по исправлению плохих секторов - стало только хуже.

    Стало только лучше.
    На каждом диске есть некоторый запас секторов, которые не используются изначально. И если на диске появляются плохие сектора, то можно пометить их как плохие, а вместо них использовать целые из этого запаса. Это и называется remap.

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

    Диск починить нельзя, выбрасывайте и покупайте другой.
    Ответ написан
    4 комментария