Лучшая практика для записи sql операторы в php

Может кто-то указывать на меня к ресурсу или показывать мне пример хорошего способа записать sql операторы в php.

Большинство операторов кажется настолько ужасным и нечитабельным.

6
задан gregh 15 June 2010 в 20:56
поделиться

8 ответов

SQL, IMO, часто кажется некрасивым и нечитаемым из-за тесной связи с другими уровнями кода. Сложные SQL-запросы часто необходимо строить условно, и когда вы начинаете вставлять HTML между SQL-запросами, помимо бизнес-логики и т. Д., Результатом становится нечитаемый код.

Рассмотрите возможность использования DAL (уровня доступа к данным) или, более формально, шлюза табличных данных или просто шлюза SQL. Это даст невероятные преимущества:

  1. Абстрагирует код SQL, что значительно упрощает переключение / перенос на другую СУБД
  2. Изолирует код SQL от вашей бизнес-логики, шаблонов и т. Д., Делая код более читаемым.

Ура, Алекс

0
ответ дан 9 December 2019 в 22:29
поделиться
  1. Используйте подготовленные операторы
  2. Не стесняйтесь форматировать свой код

Пример кода:

$stmt = $pdo->prepare('
    SELECT ...
    FROM   ...
    JOIN   ...
    JOIN   ...
    WHERE  ... AND abc = :abc AND def = :def
');

$stmt->execute(array(
    'abc' => 'abc value',
    'def' => 'def value'
));
7
ответ дан 9 December 2019 в 22:29
поделиться

http://en.wikibooks.org/wiki/Programming:PHP:SQL_Injection

См. Раздел внизу о параметризованных операторах.

1
ответ дан 9 December 2019 в 22:29
поделиться

Избегайте SELECT *

Используйте ENUM вместо VARCHAR

Подготовленные операторы (PDO PHP http: //www.php .net / manual / en / intro.pdo.php )

1
ответ дан 9 December 2019 в 22:29
поделиться

Это сообщение в блоге - хороший способ сделать это.

http://www.communitymx.com/content/article.cfm?page=1&cid=A5B54EAAE1BC138F

Лично я не включаю пустые символы новой строки.

0
ответ дан 9 December 2019 в 22:29
поделиться

Лично мне нравится разделять свой SQL следующим образом:

SELECT * FROM `table` a
INNER JOIN `table2` b
ON a.`id`=b.`id`
WHERE b.`colour` = "frink"

Так что мне нравится помещать отдельные команды в новые строки, что упрощает чтение.

0
ответ дан 9 December 2019 в 22:29
поделиться

Рассмотрим подготовленных операторов

$stmt = $db->prepare("SELECT col1, col2, col3 FROM tbl WHERE col1 = ? AND col2 = ?");
$stmt->bindParam(1, $col1);
$stmt->bindParam(2, $col2);

Или с помощью sprintf () .

$sql = sprintf("SELECT col1, col2, col3 FROM tbl WHERE col1='%s' AND col2='%s'",
    mysql_real_escape_string($col1),
    mysql_real_escape_string($col2)
);

В любом случае у вас будет одна большая некатенированная строка SQL, более удобочитаемая.

1
ответ дан 9 December 2019 в 22:29
поделиться

Руководство по безопасности PHP: SQL Injection. Книга Essential PHP Security также является быстрым, легко усваиваемым чтением.

0
ответ дан 9 December 2019 в 22:29
поделиться
Другие вопросы по тегам:

Похожие вопросы: