Задать вопрос

Как создать универсальную CRUD-операцию Create на php для разных таблиц?

Попытаюсь объяснить что имею ввиду.
Разрабатываю класс для CRUD операций для своего проекта.
Есть функция для Update. Она довольно проста, передаю ей массив с парами: ключ-значение. Ключ равен названию соответствующего столбца в бд. Просто в цикле перебираю все эти пары и обновляю в базе те поля, которые есть в этом массиве. Запрос sql формируется вида UPDATE table SET f1 = v1, f2=v2 ... и т.д.
Т.е. значения после "SET" это фактически и есть пары из массива: ключ-значение. Соответственно, эту функцию можно применить к абсолютно любой таблице, если соблюдать правило, что ей передаются данные где ключ в массиве соответствовал бы названию этого поля в базе.
Но вот как быть с операцией добавления? Ведь запрос INSERT имеет такой синтаксис, что в нем должны быть обязательно перечислены все поля, которые есть в таблице, да еще и в нужном порядке. Получается, что этой функции нельзя передать произвольный набор данных, которые и будут добавлены в базу?
  • Вопрос задан
  • 3650 просмотров
Подписаться 2 Оценить 3 комментария
Решения вопроса 1
FanatPHP
@FanatPHP
Чебуратор тега РНР
в нем должны быть обязательно перечислены все поля

кто сказал?

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

кто сказал?

Есть функция для Update.

нинужна.
Нет смысла городить целый класс только ради того, чтобы иметь возможность добавить данные в update из массива. Связав себя за это по рукам и ногам.
D ведь у тебя работает только по первичному ключу - верно? И по составному уже никак.
U у тебя обновляет только значениями. А что если в запросе надо использовать функцию? Такую как NOW(), INET_ATON()?
С у тебя умеет только тупо вставлять по списку. А в жизни этот запрос имеет куда более богатый синтаксис
про R вообще молчу. У тебя там ад, треш и угар.

И это при том, что надо всег-то научиться добавлять в запрос пару нестандартных типов данных.
include 'safemysql.class.php';
$db    = new SafeMysql();
$table = "test"; 

if (isset($_POST['delete'])) {
    $db->query("DELETE FROM ?n WHERE id=?i", $table, $_POST['id']);
} elseif ($_POST['id']) { 
    $db->query("UPDATE ?n SET ?u WHERE id=?i",$table, $data, $_POST['id']);
} else { 
    $db->query("INSERT INTO ?n SET ?u", $table, $data);
}

- вот тебе весь CRUD в 5 строчек
Ответ написан
Пригласить эксперта
Ответы на вопрос 2
viktorvsk
@viktorvsk
php.net/manual/en/book.pdo.php
И смотрите, что такое Миграции в базах данных
Ответ написан
kawabanga
@kawabanga
Сделайте запрос на базу dev.mysql.com/doc/refman/5.0/en/show-columns.html
а затем, используйте полученные данные для правильного составления sql запроса на вставку.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

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