Какие лучшие практики представления SQL в PHP? [закрыть]


я запланировать PHP вместе с SQL (в основном MySQL) в течение длительного времени, у меня уже есть определенный опыт, но я никогда не нашел хорошее решение для этого: какой лучший способ вставить SQL в PHP?

как Правило, персонал делает, это вставить этот код в кавычки, например:

$sql = "
     SELECT *
     FROM usuarios u
     ORDER BY u.nome";

Тем не менее, для целей регистрации не находится и очень интересный, потому что SQL отображается так, как в коде. Чтобы исправить это, решение было бы concatenarmos последовательных strings:

$sql = 
     "SELECT * ".
     "from usuarios u ".
     "ORDER BY u.nome";

Однако, это нецелесообразно, и при наличии ошибок.

Другой синтаксис, который я видел, но, думаю, через странной HEREDOC или NOWDOC:

$sql = <<<EOT
    SELECT *
    from usuarios u
    ORDER BY u.nome
EOT;

Уже я также думал, поместить SQL в отдельных файлах, с установленными на placeholders (для параметров, при их использовании с Doctrine2, например), но я не знаю, если это обычная практика.

Заметьте, что я не с вопросом, например, если вы должны использовать план SQL, DQL или QueryBuilder; вопрос о стилях в представления SQL "чисто" в середине кода на PHP :)

во всяком случае, какие лучшие практики представления SQL в PHP?

 1
Author: ricidleiv, 2014-02-04

4 answers

Каждая форма имеет свои преимущества и недостатки.

Текстовый Файл

В то время, когда разрабатывал framework в PHP, cogitei очень возможность хранить queries текстовых файлов.

Это укрепить разделения понятий, это, не хотел разбираться в синтаксисе PHP, смешанной с SQL.

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

Файл PHP отдельное

Я Использовал этот подход в проекте, и я нашел довольно интересным. Каждый класс имел соответствующий файл с PHP queries strings. heredoc - это representaçãop интересное в этом подходе.

Преимущество В том, что вы можете иметь обзор queries, упрощает рефакторинг SQL, и код становится более чистым. Недостатком является то, что иногда нужно остановиться, переключение файл несколько раз, чтобы увидеть содержимое переменный.

Queries inline

Сегодня я избегаю максимум, на любом языке, положить queries непосредственно внутри функции или метода.

Во-Первых, потому что с SQLs, распределенных в виде кода, если таблица изменяется, часто забываю, обновление от queries "потерянные" файлы и методы.

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

Представляя SQL String

Для представления SQL в PHP, я бы максимум образом, что он объединяет строки. Это просить тендинит.

, Используя кавычки на несколько строк, не так некрасиво, если не использовать табуляции. Пример:

<?php 
$sql = "
SELECT *
FROM usuarios u
ORDER BY u.nome";

Единственная проблема, Строки выше, строки в начале.

Уже в формате heredoc кажется мне наиболее интересным. Во-первых, потому что существует проблема разрыва строки или форматирование. Кроме того, он позволяет скопировать и вставить query легко, что я считаю важным, так как делаю это часто в процессе развития.

После того, как вы привыкли совсем немного, он не будет выглядеть так странно. ;)

С другой стороны, как уже упоминалось, на собственный вопрос, существует еще формат Nowdoc. Согласно документации, он работает как одинарные кавычки, где содержимое не анализируется и, таким образом, переменные не являются интерполяцией. Использование Nowdoc интересно, так как это позволяет избежать обработки ненужные Строки "константы", то есть, что не есть переменные PHP внутри.

Общими фразами

Принять по умолчанию, где хранить queries, облегчает понимание системы разработчиками и предотвращает внедрение bugs, поскольку не существует SQLs растянулась по коду.

 2
Author: utluiz, 2014-02-04 15:41:07

Я носил форму с вкладками нормально, но сегодня у меня используется очень класс "dibi" он является оболочкой, и слой abbstraction базы данных, чрезвычайно мощный, легкий и полезный...

Http://dibiphp.com

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

Мой обычный select будет выглядеть следующим образом:

$sql = " SELECT * FROM u пользователям ORDER BY у имени";

Dibi так свободно вы можете использовать так:

$result = dibi::select('*')->from('пользователей')->('u')->orderBy('u. nome')->fetchAll();

Также есть, как сделать другого, как практическое, так:

$resutlado = dibi::query('SELECT * FROM [пользователи] [u] ORDER BY [u].[name]')

Заметим, что в второй раз вполне устраивал в скобках, потому что postgree использует столбцы, как "u"."имя", тогда dibi проверяет, если надо, с помощью PGSQL или MYSQL, так как это абстракции, и если в mysql он берет [] если PGSQL он превращает [] "

В любом случае он является практичным и я могу изменить мой db PGSQL для MYSQL или SQL Server или других, без того, чтобы изменить практически ничего-код...

Думаю, что стоит проверить vc класс это очень хорошо... Forte abraço.

 1
Author: Tiago Diaz, 2014-02-04 15:20:31

И Я всегда использую этот метод:

$sql = "
 SELECT *
 FROM usuarios u
 ORDER BY u.nome";

Думаю, проще и менее подвержены ошибкам!

 0
Author: Leonardo, 2014-02-04 13:21:56

Я не Думаю, что hajá более правильный путь, мне часто пишут на той же строке, даже, некоторые организуют в несколько, чтобы облегчить чтение, но если тема есть организация, я бы сказал, что мне нравится, как пишет в Zend, поэтому вы пишете объектно-ориентированный, и в конце концов в результате query нормальное unica линия:

Например

 0
Author: Diego Lopes Lima, 2014-02-04 13:25:19