vladislavvs
@vladislavvs
Люблю минимализм и простоту

Как правильно добавлять множество полей в БД?

Доброго времени суток!

Постепенно учусь и отучаюсь от кода с запашком.
В данный момент интересует, можно ли такое как-то сократить, или это является нормалью?

Конкретно - несколько полей. Их может быть и 10, что будет выглядеть очень громоздко.

namespace mydir\models;

use mydir\common\Database;

class Edit {
	// Допустим данные приходят уже проверенными
	public function add($arrField)
	{
		$one = $arrField['one'];
		$two = $arrField['two'];
		$three = $arrField['three'];
		$four = $arrField['four'];
		$five = $arrField['five'];

		$sql = "INSERT INTO `item` (`one`,`two`,`three`,`four`,`five`) VALUES (?,?,?,?,?)";
		$placeholders = array($one,$two,$three,$four,$five);

		return Database::insertQuery($sql,$placeholders); // id последней вставленной строки или ошибка
	}
}


UPD: после небольших размышлений пришло в голову такое
class Edit
{
    public function add($arr = null)
	{
		// Пример массива, который приходит
		$arr = array(
			'one' => 1, 
			'two' => 'test',
			'three' => 'test',
			'four' => 55,
			'five' => 12);

		$keys = array_keys($arr);

		$a = implode(',',$keys);
		$b = implode(',',array_fill(0,count($keys),'?'));

		$sql = sprintf("INSERT INTO `test` (%s) VALUES (%s)",$a,$b);
		$placeholders = array_values($arr);

		return Database::insertQuery($sql,$placeholders);
	}
}


Имеет право на жизнь?
Данные приходят проверенные, ключи массива совпадают со столбцами в БД.
  • Вопрос задан
  • 200 просмотров
Пригласить эксперта
Ответы на вопрос 2
@IceJOKER
Web/Android developer
А как вы определяете какое поле целое, а какое поле строковое в insertQuery?

Изначально подумал, что вопрос - КАК ПРАВИЛЬНО ДОБАВЛЯТЬ МНОЖЕСТВО СТРОК В БД? - тут то есть разные варианты, а вот как правильно добавить МНОЖЕСТВО полей - то тут нет разницы одно поле или множество, перечисляете и добавляете.
А если вопрос просто - как правильно добавить, то вы идете в правильном пути, подготовленные запросы.

НО - сам метод добавления неправильный, в одном месте готовите запрос, в другом исполняете - это неправильно, в одном месте подготовьте массив добавляемых значений, а в другом месте добавляете. в общем читайте про MVC
Ответ написан
@novrm
Читайте про ORM.
Один класс - одна ответственность.
В двух словах - один класс (class Entity) - для данных, в котором поля класса соответствуют полям таблицы из базы данных, а методы - сеттеры и геттеры - устанавливают и возвращают значение этих полей...
Второй класс (class Mapper) - исключительно для заполнения Entity данными из базы данных (выборка)...
Кроме того отдельные классы для установления связи с базой данных, установка ее параметров и прочее...
Вобщем - получите PDO, Doctrine,...
Ответ написан
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы