Профиль пользователя заблокирован сроком с 10 апреля 2022 г. и навсегда по причине: систематические нарушения правил сервиса
  • Добавить универсальности к запросам БД из PHP?

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    Следует понимать, что даже с использованием перечисленных выше инструментов, без "ручной" сборки запроса не обойтись.

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

    - куча времени, убитого на поиски, адаптацию, и допиливание означенного автопостроителя
    - эмоции вида "как эта №%;%:?У#$^№ вообще работает??!" когда через пол-года придется добавить какое-либо новое поле
    - апофеоз, когда потребуется добавить условие, не поддерживаемое автопострителем, какое-нибудь IF EXISTS

    Поверьте, затраты на написание запроса вручную (неважно, через убогое mysql_query или Доктрину) - ничто по сравнению с возможностью **прочитать и понять**, для чего, вообще, данный код нужен, и как он это делает.

    Поэтому излишняя автоматизация бывает очень вредна. И гоняться за ней не стоит.
    Ответ написан
    1 комментарий
  • Как правильно сформировать запрос mysql в pdo?

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    PDO к вопросу не имеет ни малейшего отношения.

    Вопрос только в том, как определить, нужен ли нам запрос UPDATE или INSERT. причем вопросы высосан из пальца. Начинающие пользователи пхп очень часто предаются мечтаниям вместо того чтобы писать код. И из таких мечтаний получаются вопросы типа
    В методе save мы можем получить все id из базы и сравнить их с id новой новости

    Если бы автор занимался написанием кода, а не мечтаниями, то сразу бы увидел, что никакого id у новой записи в принципе нет, и быть не может. Что и является признаком, по которому мы определяем, какой запрос выполнить. И таким образом задача "получить все id из базы и сравнить их с id новости" исчезает сама собой, а в месте с ней и страхи про ужасную нагрузку на БД.

    В порядке благотворительности можно, впрочем, рассказать автору о том, что

    - синтаксис запроса для обновление выглядит как UPDATE news SET title=:title, text=:text WHERE id=:id'
    - даже если нам нужно было бы првоерять существование ид в базе, для этого не нужно выбирать ид всех новостей. Достаточно запросить одну запись с интересующим нас ид.
    Ответ написан
    Комментировать
  • Fatal error: Call to a member function fetch_assoc() on a non-object in как исправить?

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    Этот неловкий момент, когда SO.RU делает Тостера, как стоящего: mysql_fetch_array() expects parameter 1 to be reso...

    Если коротко, то перед соединением с БД надо написать волшебную строчку
    mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT);

    запустить свой скрипт и узнать, что не так с этим хостом.
    Ответ написан
    Комментировать
  • Как при использовании PDO привязать массив значений в условие IN?

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    Классическое решение:

    <?php
    $ids=array(1,2,3,7,8,9);
    $in  = str_repeat('?,', count($arr) - 1) . '?';
    $stmt = $db->prepare('SELECT * FROM table  WHERE id IN($in)');
    $stmt->execute($ids);
    Не слишком красиво, но зато безопасно.
    Ответ написан
  • Как получить параметры колонки при выборки данных через SELECT?

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    Сколько ответов, и ни одного правильного

    PDOStatement::getColumnMeta
    Ответ написан
  • Можно ли при запросе из БД получить цифру?

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    Перевожу на понятный язык ответ DevMan:

    Чтобы получить данный функционал, необходимо, чтобы были соблюдены два условия:

    - модуль pdo_mysql должен быть собран на базе mysqlnd. проверяется через phpinfo()
    - для запроса используются родные подготовленные выражения, что достигается установкой PDO::ATTR_EMULATE_PREPARES в false
    Ответ написан
    Комментировать
  • Что лучше, свой фреймворк или сторонний?

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    > "велосипед" который будет обновляться самой командой в соответствиями с требованиями проекта?

    Проблема в том, что требования бизнес-процесса всегда имеют больший приоритет перед необходимостью технической модернизации. И в реальности внутренний фремворк никогда не обновляется (ну, если только конечно вы не Баду с 100500 девопсов), и через пару лет разработчики начинают чувствовать себя питекантропами.

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

    > Но что если новая версия очень сильно отличается от старой, придется проделать много работы по переделке большого проекта на новую версию.

    Это значит, что фреймворк использовался только для украшения, а бизнес-логика писалась по-старинке, овнокодом.
    Мы месяц назад поменяли мажорную версию Симфони, с 2.3 на 3.2. Переделки потребовались, но чисто механические, по замене нескольких устаревших функций.
    Достаточно следовать рекомендованным практикам, использовать рекомендованные инструменты и апгрейд не будет настолько болезненным.

    Плюс я считаю, что болезненность апгрейда в любом случае преувеличена, и несравнима с переездом с самопала.

    > Как обычно поступают команды, когда используется сторонний фреймворк, постоянно обновляют его версию в проекте или остаются на старой версии?

    Хотя бы за мажорной версией следовать необходимо.
    Ответ написан
    3 комментария
  • Как получить данные трёхмерным массивом?

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    Интересная задачка.
    Клнечно, она была бы еще интереснее, если бы ты сразу написал нужный запрос, но и так хорошо.

    В общем, можно попробовать похимичить с константами PDO::FETCH_*. То есть запросить избыточные данные, с дублированием элементов меню, и упорядочить константами. На праздники поиграюсьпоиграюсь

    Хотя трехмерный получить наверное не получится. Ключами юудет имя меню а значениями - массив с сабменю
    Ответ написан
    Комментировать
  • Правильно ли это хранить целые огромные html коды в базе?

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    Именно такой код хранить неправильно, по очевидным причинам.

    А вообще, если это, скажем, статья с разметкой - почему нет?
    Ответ написан
    1 комментарий
  • Подготовленные запросы или подготовленные процедуры?

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    Нет, преимуществ не будет, а вот неудобства значительные. Чтобы поменять запрос или просто посмотреть его логику, придется лезть в бд, что очень неудобно.

    Да и старик Оккам не одобряет.
    Ответ написан
    1 комментарий
  • Какой способ подключения PHP к apache лучше?

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    Для тех, кто спрашивает, лучший вариант - модуль. Чтобы потом не было вопросов "ой у меня это не работает!"

    С точки зрения производительности - nginx + php-fpm под линуксом
    Ответ написан
    4 комментария
  • Как лучше кэшировать данные postgresql?

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    У начинающих программистов кэширование - это какой-то фетиш. И они пытаются впихнуть его куда угодно, без малейшего повода. А точнее, повод - это собственные страхи, порожденные невежеством
    Ответ написан
  • Альтернатива checkbox или как его заставить возвращать false если он не активен?

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    Был старый-старый хак, думаю, что он работает и сейчас
    <input type = hidden name = cbx value = 0>
    <input type = checkbox name = cbx value = 1>


    Работает, как я понимаю, за счет того, что последующее значение затирает предыдущее.
    То есть, запрос выглядит как
    ..&cbx=0&cbx=1&...
    в итоге в скрипте получается что-то вроде идущих подряд
    $_GET['cbx'] = 0;
    $_GET['cbx'] = 1;

    И в итоге остается только один.

    Отсюда становится понятно, что важно соблюдать порядок - хидден должен идти всегда первым.
    Ответ написан
    1 комментарий
  • Как правильно распределить отправку формы: файлы на один сервер, данные - на другой?

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    Открою тебе секрет: "подмонтировать" можно не только в "локальной сети".
    А отправлять форму надо на сервер приложений целиком.
    На раздающих же статику серверах пхп даже не установлен, и никаких проверок и обработок они не сделают.
    Поэтому шлёшь на один сервер, а он - после проверки и обработки - отдает на облако
    Ответ написан
    Комментировать
  • Какой должен быть синтаксис SQL запроса в php?

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    Синтаксис SQL не отличается ничем.
    Отличается только способ подстановки переменных.

    Во-первых, запросы должны исполняться не через mysql_query, а через PDO
    В-вторых, на месте переменных должны стоять знаки вопроса, а сами переменные - передаваться в запос при исполнении:
    $stmt = $pdo->prepare("UPDATE `users` SET `name`=? WHERE id=?");
    $stmt->execute(array($name, $id));
    Ответ написан
    2 комментария
  • Неправильно работает скрипт, что я делаю не так?

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    Проблем у тебя две
    1. Ты используешь mysqli, а должен использовать PDO
    2. Самая главная проблема - ты не читаешь описание функции в документации. За это в хороших местах бьют линейкой по пальцам. То есть вот ты сам себе выдумываешь назначение функции, втюхиваешь ее себе в код, а потом удивляешься, почему ничего не работает! Ну так естественно, что не работает - и не должно.

    В общем, так как ты хочешь, работает в PDO функция fetchAll(). Поэтому быстро переходишь на PDO. Как соединяться написано здесь, а код переписываешь так:
    $data = $db->query('SELECT * FROM news');
    foreach($data as $res){
    Ответ написан
    Комментировать
  • Почему запись в БД вставляется более одного раза?

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    throw new DBException("Wrong table or parameters");

    Это такая шутка остроумная?
    Ответ написан
  • Как перебрать индексы не по порядку?

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    Я тоже не понимаю, что нужно, а автор - по старой доброй традиции, хотя и спрашивает "есть ли под задачу другой подход", но саму задачу не описывает. А только свои страдания в борьбе с ней.

    Из этого невнятного кода я могу предположить только такое
    $array = range(1,20);
    shuffle($array);
    foreach($array as $item)
    {
        echo $item, "<br>";
    }
    Ответ написан
    1 комментарий
  • Почему ничего не приходит в массив $_FILES?

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    проверять надо не name, а error
    Ответ написан
  • Есть ли PHP User Group в Москве?

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    Есть РНРClub, который, в общем, поляну давно уже занял.
    Жаль в последнее время активность сильно снизилась.
    Веборубы были отличной, просто отличной идеей.
    Ответ написан
    Комментировать