Можно ли писать sql запросы в цикле?

Я помню, было очень неплохая книга по MySQL, и автор оной был

Кузнецов

. Кажется,

вот это она

. Есть ещё

вот такая

, но я кажется знакомился только с первой. Не смотря на приличный опыт работы с этой БД, нашел для себя много интересного.

Спасибо на добром слове!

Уже подумываю написать свою

Как такового, "объектного" программирования в PHP, в чистом виде нет. В не в том смысле, что в PHP нет объектов или классов, а в том, что обычно эти объекты объединены в конечный продукт, который обычно называется "фреймворк" (framework). То есть, какие-то отдельные классы/библиотеки в "чистом PHP" используются крайне редко. Да и сайты на "чистом" PHP обычно имеет смысл писать только в очень редких/крайних случаях, кои случаются ну ооочень редко. Обычно, эти самые библиотеки, отлично прикручиваются к фреймворкам.

Для знакомства с фреймворками, могу порекомендовать, для начала

CodeIgniter

. У него конечно, масса недостатков, в т.ч. далеко не лучший шаблонизатор и множество других особенностей. Но он довольно прост в изучении и помогает понять общий концепт практически всех PHP-фреймворков. Ещё одно из его достоинств - есть документация на русском.

Следующий за ним, пожалуй будет

Kohana

. Изначально это был форк (клон) того самого CodeIgniter'a, потом вырос в отдельный фреймворк. Достаточно неплох для мелко-средних проектов, немного более, эм... более... более "продуманный" наверное, чем CodeIgniter, но всё так же не перегружен "лишним" функционалом, не перегружен классами "на все случаи жизни" и так далее. Удобная система моделей и вложенности.

Далее, можно посмотреть

Yii

он посложнее первых двух, и не нравится мне по ряду субъективных причин (хотя, я конечно

не

говорю об отсутствии у него своих достоинств). В нём уже присутствуют такие штуковины как "генераторы кода", и "консольные команды".

И самые пожалуй "жирные" фреймворки, это: Symfony, Laravel, Zend. Их я рекомендую после знакомства хотя бы с одним из более "мелких" фреймворков, т.к. понять их структуру и логику довольно не просто.

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

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

Так же и с ограничением на длину результатов объединения. По умолчанию это значение равно 1024, но Вы легко можете его увеличить, единожды выполнив запрос указанный выше. Как мы можем видеть на

этой странице

, для 32-х битных версий MySQL максимальным значением будет: 4294967295 (что довольно таки, не мало), а для 64-битных, и того больше: 18446744073709551615.

Соответственно, выглядит всё в общей сложности примерно так:

1. Подключаемся к серверу БД

2. Выбираем базу

3. Устанавливаем кодировку по умолчанию "SET NAMES utf8;"

4. Устанавливаем максимальную длину для GROUP_CONCAT "SET group_concat_max_len = 4294967295"

5. Работаем с базой далее, как нам удобно (выполняем все остальные запросы). То есть, перед каждым запросом делать "SET NAMES" или "SET group_concat_max_len" не нужно!! Достаточно сделать это единожды, сразу после подключения к базе.

Отдельно стоит заметить, что

group_concat_max_len

-- это имя переменной MySQL. Некоторые из них, можно изменять "на горячую", т.е. с помощью SQL-запросов, некоторые только в конфигурации базы.

Ещё стоит обратить внимание, что существуют специальные функции

для выбора БД, с котором будем работать

или для

установки кодировки по умолчанию

и по возможности лучше использовать их, вместо соответствующих им SQL-запросов.

Добавлено через 9 минут

Ещё пожалуй, можно добавить то, что установка этой переменной будет действовать до перезагрузки сервер БД (после перезагрузки, сервер загрузит значения либо из файла конфигурации, либо установит значения по умолчанию).

Что бы посмотреть значения всех переменных MySQL, можно выполнить запрос:

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

Ещё на сервере обычно присутствует база с именем

information_schema

- в это базе хранится системная информация сервера БД, в частности пользователи БД и их права и многое другое... Рекомендую посмотреть на неё, в ознакомительных целях.