Даже в этом случае, утрированно, слово "спортзал" может иметь пять разных значений, "моя" - восемь и "ходить" - двадцать пять. И исходя из контекста и грамматики фраза на самом деле означает "Дайте Джиму уйти".
Ради бога. Любовь - штука субъективная. Непонятно только, зачем было утруждаться и делиться с нами этими интимными подробностями. "Три дня я гналась за вами, чтобы сказать, как вы мне безразличны" :-D
И надо бы освоить канонические названия для описанных практик. Приём "Вместо этого кода" в разделе про read-only классы называется Nullsafe оператор. Запись структуры данных в объект называется не ООП, а DTO. "Меньше вложенных уровней" называется "ранний возврат".
Мда. Погуглил - оказывается неграмотная школота уже вовсю использует это нерусское "искусственный общий интеллект". И к автору статьи не придерёшься, "а чо я, все так пишут". Зато я у мамки журналист.
Столько, сколько нужно для того чтобы перегородить дорогу. Новость, вообще-то не про статистику разряжающихся электромобилей. И не про то что три из всех, сколько их та было, встали. А про а про то, что три электромобиля якобы стали причиной пробки. Не идиоты-водители, не разгильдяи-полицейские, а три электромобиля.
Это был пример когда нужно вшивать какой-то кусок в какой-то SQL.
Эта фраза мне активно не нравится. Она наводит на некие подозрения, которые я не буду здесь озвучивать, но главное в том, что она в корне неверна.
Вы не можете использовать forSql() чтобы вшивать какой-то кусок в какой-то SQL. Вы можете использовать forSql() только для того же, для чего используется convertToDb(): чтобы "вшивать" в SQL строковый литерал, только за большее количество шагов. Никакой другой кусок вы с её помощью встраивать не должны.
Именно поэтому, при наличии convertToDb(), использование forSql() превращается в бессмыслицу: зачем добавлять кавычки вручную, если есть функция, которая сделает это за нас.
Работа веб-сервера в связке Nginx и Apache с использованием mod_php демонстрирует значительное увеличение производительности.
Ваши графики этого не показывают. Надо или отредактировать текст, или разобраться, почему в графиках нарисована ерунда.
Apache mod_php рекомендуется использовать вместе с Nginx в качестве сервера для статики в проектах, где нет больших нагрузок и требуется минимальная настройка.
Это какая-то логика системы чат жипити. Настройка энжинкса в качестве прокси ничуть не проще, чем настройка в качестве основного сервера. Но при этом во втором случае мы полностью избавляемся от апача. То есть вместо того, чтобы сделать две сущности (апач+модпхп либо энжинкс+фпм), настраиваем три и говорим всем, что это проще.
На мой взгляд, единственная причина использовать этого франкенштейна - древний легаси код, половина которого написана в файлике .htaccess. А не мифическая "минимальная настройка".
Вот здесь я реально удивился. Я не могу даже вообразить, почему вы так решили. При том что нет совершенно никаких проблем добавить в запрос строковый литерал целиком, а не собирать его из огрызков. Почему вы считаете, что с использованием convertToDb этот запрос написать нельзя? Подготовленные (в общепринятом смысле) запросы ведь как-то справляются же?
Я не написал выше, хотя надо было: эта опечатка значимая. Сразу возникает вопрос, а что будет, если в таблице нет данных? А если все работает даже если запрос не вернет ни одной строки, то зачем тогда её выбирать :)
Завидую вашей способности читать чужие мысли
Ну кстати да, интересно, как это работает. Если проанализировать ход мысли, приведший к такому выводу, то будет примерно так: поскольку отличие этих двух функций никак не объясняется, а сама фраза, "Экранированный SQL", является технически некорректной, можно предположить, что автор действительно вкладывает в convertToDb какой-то особый смысл. Но я рад что это был вопрос терминологии, который сейчас исправлен.
В целом сам класс SqlHelper , является хорошим примером когда стоит использовать forSql .
Не очень понял, что имеется в виду. forSql используется в SqlHelper, фактически, только один раз, для реализации convertToDbString.
В любом случае, нет ни одной причины использовать forSql вместо convertToDb где бы то ни было.
По поводу обрезания я всё-таки придерживаюсь позиции "если длина строки превышает разрешённую, то при валидировании входящих данных выдаём пользовательскую ошибку, а в остальных случаях - системную"
Очень жаль, что вы не заметили блок кода который следует сразу за этой фразой :(
Блок кода рассказывает, как делать upsert. А что означает слово prepare в названиях методов, он вообще никак не объясняет.
Пока вы пишите простой код на 2 строки
Ну так он и должен быть на две строки. Если больше, то надо вынести формирование запросов в отдельные методы. Тогда любой код транзакции будет содержать столько строк, сколько в ней запросов. Плюс "на простыне кода разница уже не будет заметна", и функция не нужна - так себе аргумент. Тут вполне можно было согласиться, что да, такой метод в Битриксе не помешал бы. С другой стороны, вы и так много где согласились с моим, как всегда не слишком куртуазным разбором :)
перед запросом на добавление первоначально выполняется запрос на чтение SELECT * FROM ... LIMIT 0,1
Удивился, полез посмотреть, и действительно, на самом деле выполняется более логичный запрос с LIMIT 0.
в итоге выполнится ПОДГОТОВЛЕННЫЙ запрос
Всё-таки, слово "подготовленный" имеет строго определённое значение. Здесь лучше подойдёт "отформатированный".
Самые важные методы связаны непосредственно с безопасностью и экранированием:
...и видимо поэтому показаны максимально невнятно, и без исходника в них разобраться довольно сложно. Спасибо, кстати, некоему А.В.Шаталову за то что код можно нормально посмотреть. Самому Битриксу это, судя по всему, не нужно.
Экранированный SQL
Судя по всему, автор статьи сам не понимает, что делает метод convertToDb, и почему его всегда следует предпочесть методу forSql. А функция на самом деле интересная. Хотя есть и спорные моменты. Вот эта привычка молча обрезать строку по длине наверняка подпортила нервов не одному поколению программистов: они думали что данные записались норм - ошибок ведь не было - а потом через полгода выплывает, что там какие-то обрезки.
Также в хелпере есть ряд методов для формирования запросов с префиксом prepare.
И снова термин, который во всём остальном мире означает одно, а в битриксе - что-то совсем другое. Но при этом что именно другое - в статье не объясняется!
Транзакции
И никто не догадался сделать простую онанимку, чтобы писать
$db->transaction(function () use ($db) {
$db->queryExecute('UPDATE my_table SET active = "N" WHERE age > 0');
\Bitrix\Main\SiteTable::update('s1', [
'ACTIVE' => 'N',
]);
});
а не каждый раз всю эту колбасу на пол-экрана.
Но в целом неплохо, было интересно ознакомиться с тем, как это делают в Одессе. Лишний раз убедился, что голова у битрикс-людей устроена по-другому, и без крайней нужды лучше туда не соваться.
В советских компаниях премия - это легальный способ штрафовать сотрудника. Так что при возможности ни на какие премии соглашаться не стоит. Договорились на сумму? Вот она и стоит в договоре.
ОМФГ, это не "компетенция ценой двадцать баксов". Это базовый навык в современном обществе, умение выразить свою мысль. Причем работа с ИИ как раз его-то и требует в первую очередь. Если задача не получить набор слов по жёстко заданной теме.
У меня дежавю. Полная уверенность, что я уже читал этот текст, только там была не писалка домашек, а какой-то конвертер, то ли из ворда, то ли в эксель, то ли что-то в этом роде... А, ну точно.
Пока уже писать статью о том, как писать на Хабр успешные статьи про успешный успех.
Даже в этом случае, утрированно, слово "спортзал" может иметь пять разных значений, "моя" - восемь и "ходить" - двадцать пять. И исходя из контекста и грамматики фраза на самом деле означает "Дайте Джиму уйти".
Ради бога. Любовь - штука субъективная. Непонятно только, зачем было утруждаться и делиться с нами этими интимными подробностями. "Три дня я гналась за вами, чтобы сказать, как вы мне безразличны" :-D
У вас устаревшие сведения. Со скоростью у РНР всё хорошо, многопоточность обеспеспечивается менеджером процессов, строгую типизацию уже подвезли.
Довольно сумбурная подборка, но в целом ничего.
И надо бы освоить канонические названия для описанных практик. Приём "Вместо этого кода" в разделе про read-only классы называется Nullsafe оператор. Запись структуры данных в объект называется не ООП, а DTO. "Меньше вложенных уровней" называется "ранний возврат".
Блин, действительно. Как-то я повёлся на то что это хитрые ключики, но ведь действительно, минус просто исключает слово.
Офигеть! И волшебный ключик, кстати, не особо помогает. Кажется, он вообще не работает в режиме поиска изображений.
Похоже, что пора вводить понятие "низкофоновые данные" (по аналогии с низкофоновой сталью) для информации, которая не была засорена ИИ...
И на кой ляд вам "Клиентский IP"? Вот мой например: 192.168.1.98. Много вам с него пользы?
Не очень совсем понятно, что вы пытаетесь иметь в виду.
А зачем для этого "произвольный" сайт? Специализированного недостаточно?
Мда. Погуглил - оказывается неграмотная школота уже вовсю использует это нерусское "искусственный общий интеллект". И к автору статьи не придерёшься, "а чо я, все так пишут". Зато я у мамки журналист.
Сложностей нет, если заниматься проблемой. Но зачем, если можно просто найти виноватого?
Столько, сколько нужно для того чтобы перегородить дорогу. Новость, вообще-то не про статистику разряжающихся электромобилей. И не про то что три из всех, сколько их та было, встали. А про а про то, что три электромобиля якобы стали причиной пробки. Не идиоты-водители, не разгильдяи-полицейские, а три электромобиля.
PHP - современный язык.
Эта фраза мне активно не нравится. Она наводит на некие подозрения, которые я не буду здесь озвучивать, но главное в том, что она в корне неверна.
Вы не можете использовать forSql() чтобы вшивать какой-то кусок в какой-то SQL. Вы можете использовать forSql() только для того же, для чего используется convertToDb(): чтобы "вшивать" в SQL строковый литерал, только за большее количество шагов. Никакой другой кусок вы с её помощью встраивать не должны.
Именно поэтому, при наличии convertToDb(), использование forSql() превращается в бессмыслицу: зачем добавлять кавычки вручную, если есть функция, которая сделает это за нас.
Ваши графики этого не показывают. Надо или отредактировать текст, или разобраться, почему в графиках нарисована ерунда.
Это какая-то логика системы чат жипити. Настройка энжинкса в качестве прокси ничуть не проще, чем настройка в качестве основного сервера. Но при этом во втором случае мы полностью избавляемся от апача. То есть вместо того, чтобы сделать две сущности (апач+модпхп либо энжинкс+фпм), настраиваем три и говорим всем, что это проще.
На мой взгляд, единственная причина использовать этого франкенштейна - древний легаси код, половина которого написана в файлике .htaccess. А не мифическая "минимальная настройка".
И fpm ещё какой-то павлин написал.
Вот здесь я реально удивился. Я не могу даже вообразить, почему вы так решили. При том что нет совершенно никаких проблем добавить в запрос строковый литерал целиком, а не собирать его из огрызков. Почему вы считаете, что с использованием convertToDb этот запрос написать нельзя? Подготовленные (в общепринятом смысле) запросы ведь как-то справляются же?
Я не написал выше, хотя надо было: эта опечатка значимая. Сразу возникает вопрос, а что будет, если в таблице нет данных? А если все работает даже если запрос не вернет ни одной строки, то зачем тогда её выбирать :)
Ну кстати да, интересно, как это работает. Если проанализировать ход мысли, приведший к такому выводу, то будет примерно так: поскольку отличие этих двух функций никак не объясняется, а сама фраза, "Экранированный SQL", является технически некорректной, можно предположить, что автор действительно вкладывает в convertToDb какой-то особый смысл. Но я рад что это был вопрос терминологии, который сейчас исправлен.
Не очень понял, что имеется в виду. forSql используется в SqlHelper, фактически, только один раз, для реализации convertToDbString.
В любом случае, нет ни одной причины использовать forSql вместо convertToDb где бы то ни было.
По поводу обрезания я всё-таки придерживаюсь позиции "если длина строки превышает разрешённую, то при валидировании входящих данных выдаём пользовательскую ошибку, а в остальных случаях - системную"
Блок кода рассказывает, как делать upsert. А что означает слово prepare в названиях методов, он вообще никак не объясняет.
Ну так он и должен быть на две строки. Если больше, то надо вынести формирование запросов в отдельные методы. Тогда любой код транзакции будет содержать столько строк, сколько в ней запросов. Плюс "на простыне кода разница уже не будет заметна", и функция не нужна - так себе аргумент. Тут вполне можно было согласиться, что да, такой метод в Битриксе не помешал бы. С другой стороны, вы и так много где согласились с моим, как всегда не слишком куртуазным разбором :)
Удивился, полез посмотреть, и действительно, на самом деле выполняется более логичный запрос с
LIMIT 0.Всё-таки, слово "подготовленный" имеет строго определённое значение. Здесь лучше подойдёт "отформатированный".
...и видимо поэтому показаны максимально невнятно, и без исходника в них разобраться довольно сложно. Спасибо, кстати, некоему А.В.Шаталову за то что код можно нормально посмотреть. Самому Битриксу это, судя по всему, не нужно.
Судя по всему, автор статьи сам не понимает, что делает метод
convertToDb, и почему его всегда следует предпочесть методуforSql. А функция на самом деле интересная. Хотя есть и спорные моменты. Вот эта привычка молча обрезать строку по длине наверняка подпортила нервов не одному поколению программистов: они думали что данные записались норм - ошибок ведь не было - а потом через полгода выплывает, что там какие-то обрезки.И снова термин, который во всём остальном мире означает одно, а в битриксе - что-то совсем другое. Но при этом что именно другое - в статье не объясняется!
И никто не догадался сделать простую онанимку, чтобы писать
а не каждый раз всю эту колбасу на пол-экрана.
Но в целом неплохо, было интересно ознакомиться с тем, как это делают в Одессе. Лишний раз убедился, что голова у битрикс-людей устроена по-другому, и без крайней нужды лучше туда не соваться.
В советских компаниях премия - это легальный способ штрафовать сотрудника. Так что при возможности ни на какие премии соглашаться не стоит. Договорились на сумму? Вот она и стоит в договоре.
ОМФГ, это не "компетенция ценой двадцать баксов". Это базовый навык в современном обществе, умение выразить свою мысль. Причем работа с ИИ как раз его-то и требует в первую очередь. Если задача не получить набор слов по жёстко заданной теме.
У меня дежавю. Полная уверенность, что я уже читал этот текст, только там была не писалка домашек, а какой-то конвертер, то ли из ворда, то ли в эксель, то ли что-то в этом роде... А, ну точно.
Пока уже писать статью о том, как писать на Хабр успешные статьи про успешный успех.