School PHP
Вернуться на страницу трюков

Правильные и красивые обращения к БД MySQL

Часто бывает так, что делаете запрос к БД (Базе Данных) и вроде ячейки есть такие, а запрос не проходит. Беда в том, что есть область имён, которые зарезервированы для внутренних процедур PHP,MySQL, поэтому такие имена как 'desc', 'link' перестают работать. Ваши запросы обычно выглядят так:
<?php
mysql_query("SELECT * FROM news WHERE id='$id' AND desc='$desc'");
mysql_query("INSERT INTO news (desc) VALUES ('$desc')");


Правило №1: обязывать не буду, но в качестве рекомендации советую использовать не зарезервированные имена ячеек и таблиц. К примеру: вместо desc мы пишем description, или вместо link пишем href.

Правило №2: все имена ячеек или таблиц рекомендованно обрамлять такой кавычкой ` , это позволит скрипту понять, что в данном слове обращение идёт непосредственно к таблице или ячейке, а не конкретный процес. Не смотря на это, если мы забываем про эту кавычку, при обращении к БД MySQL сам дописывает их. Путаница как раз возникает, когда имя ячейки и команды одинакова, а кавычки не проставлены, тогда скрипт не может определить, что именно хочет пользователь в данном случае. Вот пример, как надо:
<?php
mysql_query("SELECT * FROM `table` WHERE `id`='$id'");
mysql_query("INSERT INTO `news` (`desc`) VALUES ('$desc')");


Правило №3: запросы на вставку можно делать двумя способами. Первый я уже показывал, второй более удобен, когда вставляем одну запись. Рекомендую использовать именно её, тогда логическая часть вставки будет виднее (далее уже будем рассматривать вторую вставку). Смотрим 2 одинаковых вставки двумя стилями:
<?php
mysql_query("INSERT INTO `news` (`desc`,`text`) VALUES ('$desc','$text')");
mysql_query("INSERT INTO `news`  SET `desc` = '$desc', `text`='$text'");


Правило №4: исходя из общих правил выделения переменных в строках, обрамляем их кавычками либо фигурными скобками:
<?php
mysql_query("INSERT INTO `news`  SET `description` = '".$desc."', `text`='".$text."'");

Это и есть тот пример, когда красивее смотрелись бы фигурные скобки, смотрим:
<?php
mysql_query("INSERT INTO `news`  SET `description` = '{$desc}', `text`='{$text}'");
mysql_query("SELECT * FROM `news` WHERE `id`='{$id}' AND `desc`='{$desc}'");


Правило №5: это стиль, особенно когда работаем в команде или выставляем конкурсные работы. Давайте посмотрим на обычный запрос обновления данных (тоже самое и при вставке) данных (большой) со стилем, думаю, разница будет заметка на глазах:
<?php
mysql_query("
    UPDATE `news` SET
    `description` = '".$description."',
    `text` = '".$text."',
    `number` = '".$number."',
    `author` = '".$author."',
    `img` = '".$img."'
    WHERE `id` = '".$id."'
");


Правило №6: все данные, уходящие в таблицу защищать. Меры предосторожности никогда не повредят. Любые цифровые данные (целые) достаточно приводить к числу: (int)$id , (по числам скажу, что их не стоит обрамлять внутри запроса кавычками, это лишнее: WHERE `id` = 7, а не '7'!). Строчные данные мы обрабатываем через mysql_real_escape_string. Обе эти функции обезопасят нас он 99% "детских" посягательств на нашу целостность и конфиденциальность данных в базе. Результат смотрим далее:
<?php
mysql_query("
    UPDATE `news` SET
    `description` = '".mysql_real_escape_string($description)."',
    `text` = '".mysql_real_escape_string($text)."',
    `number` = ".(int)$number.",
    `author` = '".mysql_real_escape_string($author)."',
    `img` = '".mysql_real_escape_string($img)."'
    WHERE `id` = ".(int)$id."
");

Войти | Регистрация