Готовые запросы и код для MySQL

Приведенные материалы помогают вспомнить синтаксис и использовать куски кода как капипасту после допиливания под конкретную низкоуровненвую задачу, не использующую фреймворков. Не рекомендуется без понимания принципов построения и смысла конструкций.

Заготовки для обращения к таблицам MySQL из PHP через PDO без использования фреймворков. Вставка, чтение, обновление записей.
$DBH = new PDO("mysql:host=localhost;dbname=DB_NAME;charset=utf8", "DB_USER", "DB_PASW");  
$DBH->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
//$DBH->setAttribute(PDO::ATTR_DEFAULT_FETCH_MODE, PDO::FETCH_ASSOC);
//$DBH->setAttribute(PDO::ATTR_EMULATE_PREPARES, false);

global $DBH;
try
{
	$DBH->beginTransaction(); // TRUE

	// Insert
	$u = $DBH->prepare('INSERT INTO table1 (data1,data2) VALUES (:data1,:data2)');
	$u->execute(array(':id' => $id, ':data1' => $data1, ':data2' => $data2)); // Вариант для одиночного запроса
	//$u->bindParam(':data1', $data1, PDO::PARAM_INT); // Вариант для многократного повторения запроса
	//$u->bindParam(':data2', $data2, PDO::PARAM_STR);
	//foreach(...)
	//{
	//	$id = ...; $data1 = ...; $data2 = ...;
	//	if (!$u->execute())
	//		exit('DB insert fail'); // Error
	//}
	$id = $DBH->lastInsertId();

	// Read
	// $r = $DBH->query('SELECT * FROM table1 WHERE id=1'); // Одиночный запрос без изменяемых параметров
	$r = $DBH->prepare('SELECT * FROM table1 WHERE id=:id'); // Одиночный запрос с параметрами
	$r->execute(array(':id' => $id)); // Вариант для одиночного запроса с параметрами
	//$r->bindParam(':id', $id, PDO::PARAM_INT); // Вариант для многократного повторения запроса
	//foreach(...) { $id = ...; $r->execute(); /*fetch*/; ...; }
	if ($r->rowCount() !== 1)
		exit('DB read fail'); // Error
	while ($d = $r->fetch(PDO::FETCH_ASSOC))
		continue;
	// $d = $r->fetchAll(PDO::FETCH_ASSOC); // Установить LIMIT [<offset>,]<count> (при подстановке ставить PARAM_INT)

	// Update
	$u = $DBH->prepare('UPDATE table1 SET data=:data WHERE id=:id');
	$u->execute(array(':id' => $id, ':data' => $data)); // Вариант для одиночного запроса
	//$u->bindParam(':id', $id, PDO::PARAM_INT); // Вариант для многократного повторения запроса
	//$u->bindParam(':data', $data, PDO::PARAM_STR);
	//foreach(...)
	//{
	//	$id = ...; $data = ...;
	//	if (!$u->execute())
	//		exit('DB update fail'); // Error
	//}

	// Delete
	$u = $DBH->prepare('DELETE FROM table1 WHERE id=:id');
	$u->execute(array(':id' => $id)); // Вариант для одиночного запроса
	//$u->bindParam(':id', $id, PDO::PARAM_INT); // Вариант для многократного повторения запроса
	//foreach(...)
	//{
	//	$id = ...;
	//	if (!$u->execute())
	//		exit('DB delete fail'); // Error
	//}

	// Сделать unset() для переменных, попавших в bindParam перед их повторным использованием
	$DBH->commit(); // TRUE
}
catch(PDOException $e)
{
	$DBH->rollBack(); // TRUE
	file_put_contents('PDOErrors.txt', $e->getMessage(), FILE_APPEND);
	//exit('DB error: '.$e->getMessage());
}
Сравнить две таблицы. Отображает список id таблицы 1, которых нет в таблице 2.
SELECT id FROM table1 WHERE (id) NOT IN (SELECT id FROM table2)

Скопировать строки (записи, кортежи) из табицы 1 в таблицу 2.
* Таблицы должны иметь одинаковую структуру (количество, тип и порядок размещения столбцов), иначе вместо * следует подставить названия соответствующих столбцов исходной таблицы 1 в порядке их следования в таблице 2, при этом для таблицы 2 их названия не имеют значения, а важны только количество, тип и порядок перечисления.
INSERT INTO table2 SELECT * FROM table1 WHERE id<=5
INSERT INTO table2 SELECT id, data1, data2 FROM table1 WHERE id=5 
Скопировать недостающие строки (записи, кортежи) из табицы 1 в таблицу 2.
* См. примечание из прерыдущего примера
INSERT INTO table1 SELECT * FROM table2 WHERE (id) NOT IN (SELECT id FROM table1)
Заготовка для запроса на выборку SELECT.
SELECT * FROM table WHERE id=:id GROUP BY data2 ORDER BY data1 ASC, data2 DESC LIMIT 0,10
Ограниченные функции чтения одной строки и обновления одного поля по уникальному ключу таблицы MySQL в PHP через PDO без использования фреймворков. Лишь аргументы $id и $value могут браться из пользовательского ввода, все остальные должны быть жёстко заданы в самой программе, либо фильтроваться по "белым" спискам.
function dbGetById($table, $names, $id, $field='id')
{	// Security warning: $table, $names, $field
	global $DBH;
	$r=$DBH->prepare('SELECT '.$names.' FROM '.$table.' WHERE '.$field.'=:id');
	if ($r->execute(array('id' => $id)) === TRUE)
		if ($r->rowCount() === 1)
			if ($d = $r->fetch(PDO::FETCH_ASSOC))
				return $d;
	return FALSE;
}

function dbSetById($table, $name, $value, $id, $field='id')
{	// Security warning: $table, $name, $field
	global $DBH;
	$u=$DBH->prepare('UPDATE '.$table.' SET '.$name.'=:value WHERE '.$field.'=:id');
	return $u->execute(array('id' => $id, 'value' => $value));
}
Запрос для нормализации БД: установка связи с дочерней таблицей через id, вместо поля с текстовыми данными/текстовым идентификатором.
UPDATE tparent,tchild SET tparent.child_id=tchild.id
WHERE tparent.child_name=tchild.child_name;