Может кто-то указывать на меня к ресурсу или показывать мне пример хорошего способа записать sql операторы в php.
Большинство операторов кажется настолько ужасным и нечитабельным.
SQL, IMO, часто кажется некрасивым и нечитаемым из-за тесной связи с другими уровнями кода. Сложные SQL-запросы часто необходимо строить условно, и когда вы начинаете вставлять HTML между SQL-запросами, помимо бизнес-логики и т. Д., Результатом становится нечитаемый код.
Рассмотрите возможность использования DAL (уровня доступа к данным) или, более формально, шлюза табличных данных или просто шлюза SQL. Это даст невероятные преимущества:
Ура, Алекс
Пример кода:
$stmt = $pdo->prepare('
SELECT ...
FROM ...
JOIN ...
JOIN ...
WHERE ... AND abc = :abc AND def = :def
');
$stmt->execute(array(
'abc' => 'abc value',
'def' => 'def value'
));
http://en.wikibooks.org/wiki/Programming:PHP:SQL_Injection
См. Раздел внизу о параметризованных операторах.
Избегайте SELECT *
Используйте ENUM
вместо VARCHAR
Подготовленные операторы (PDO PHP http: //www.php .net / manual / en / intro.pdo.php )
Это сообщение в блоге - хороший способ сделать это.
http://www.communitymx.com/content/article.cfm?page=1&cid=A5B54EAAE1BC138F
Лично я не включаю пустые символы новой строки.
Лично мне нравится разделять свой SQL следующим образом:
SELECT * FROM `table` a
INNER JOIN `table2` b
ON a.`id`=b.`id`
WHERE b.`colour` = "frink"
Так что мне нравится помещать отдельные команды в новые строки, что упрощает чтение.
Рассмотрим подготовленных операторов
$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, более удобочитаемая.
Руководство по безопасности PHP: SQL Injection. Книга Essential PHP Security также является быстрым, легко усваиваемым чтением.