Готовые заявления PHP \ MYSQL

Я новичок в mysql и php и хотел прояснить что-то на подготовленных заявлениях.

Все примеры, которые я видел, только добавляют параметры для фактических данных в таблице, является ли плохая практика параметризировать все поля, чтобы было меньше заявлений? например

UPDATE ? SET ?=? WHERE ID=? 

спасибо

Solutions Collecting From Web of "Готовые заявления PHP \ MYSQL"

Вы не можете параметризовать идентификаторы. Вы можете параметризовать только данные . В противном случае основной параметр параметризации, разделение между структурой оператора и данными , довольно спорный. Понимать, что параметризация не просто прикольная копирование и вставка, это метод, чтобы убедиться, что база данных имеет четкое разделение между статическими частями (из которых он будет принимать свои инструкции) и динамическими частями (которые он будет рассматривать как данные и только данные).


Лично я не совсем понимаю, почему каждый пытается максимально свести к минимуму SQL и не хочет писать. В приложении реального мира существует определенное, конечное число SQL-запросов, которые приложение отправит в базу данных. Там будет один запрос, чтобы найти пользователя по имени пользователя, один для вычисления числа foos в таблице столбцов и т. Д. И т. Д. Напишите эти запросы один раз , долго. Попросите метод findUserByName() где-нибудь, содержащий запрос, чтобы найти пользователя по имени, выписанному в SQL. Вам не нужно динамически комбинировать каждый отдельный запрос, вам просто нужно написать его один раз. Это также дает вам хороший «инвентарь» всего возможного взаимодействия с базой данных и позволяет при необходимости вручную настраивать. </rant>


Таким образом, это невозможно и ошибочно.

Несмотря на то, что ответ на отличный отпечаток затрагивает ваш вопрос буквально, стоит упомянуть еще кое-что.

Если вы посмотрите на какую-либо важную freamework, вы найдете функцию … update (), которая работает точно так же:

 function update($table, $data, $id) { 

поэтому подход довольно популярен в целом.
Тем не менее, это неправильно и ошибочно.

Будучи изначально негибким, он быстро становится непригодным:

  • как только вам понадобится имя поля, отличное от обычного id,
  • как только вам понадобится более сложное состояние,
  • как только вам понадобится обновление на основе JOIN,
  • как только вам понадобится использовать функцию SQL (!) для обработки некоторых данных

все эти случаи сделают изначально небольшую и опрятную функцию раздутым монстром.

Но средство просто.
То, что вам действительно нужно, является заполнителем для каждого типа данных, который может быть добавлен в запрос. Итак, добро пожаловать в SafeMysql – библиотеку, которая выполнит ваши мечты:

 $db->query("UPDATE ?n SET ?u WHERE id=?i", $table, $data, $id); 

он делает именно то, что вы хотите, но делаете это правильно. И даже такой сложный запрос не составит труда:

 $data = array('field'=>$value,'field2'=>$value); $ids = array(1,2,4); $sql = "UPDATE t SET ts=unix_timestamp(), ip=inet_aton(?s),?u WHERE id IN(?a)"; $db->query($sql, $ip, $data, $ids); 

Хотя это цель не делать "less [SQL] statements" , но писать меньше PHP-кода и делать ваш запрос безопасным , сохраняя при этом привычный обычный SQL, без компромиссов, таких как изучение нового языка некоторого Query Builder, который является просто SQL диалект, написанный на PHP.

Да, очевидно, потому что это невозможно прочитать. Даже со значениями, я бы сказал, что лучше иметь заполнители в ключевой форме. Например

 UPDATE mytable SET `name`=:fullname WHERE ID=:id