Вход / Регистрация
Вход
Правильные и красивые обращения к БД 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."
");