i - 2
только вычисляет значение, но никуда его не записывает. Чтобы изменить переменную, надо написать i = i - 2
$stx = $pdo->prepare("SELECT `user_id` FROM `reg` WHERE `login` = :login AND `password` = :passwd");
$stx->execute(array('login' => $login, 'passwd' => $passwd));
if ($row = $stx->fetch(PDO::FETCH_ASSOC)) {
$dhs = $row['user_id'];
$found = 1;
} else {
$dhs = '';
$found = 0;
}
UPDATE (
SELECT `hash`, MIN(`field`) AS `first`
FROM `table`
GROUP BY `hash`
HAVING COUNT(*) > 1
) AS `t1` ON `t1`.`hash` = `t`.`hash`
JOIN `table` AS `t` ON `t`.`hash` = `t1`.`hash`
AND `t`.`field` <> `t1`.`first`
SET `t`.`hash` = ...
Литературу не подскажу, начинал я очень давно, на ассемблере и совсем на других компьютерах. Могу только посоветовать научится пользоваться отладкой, пошагово прослеживать работу алгоритмов. Ну и понять, как программа и данные размещаются в памяти, как работают указатели. Тогда будет гораздо проще в любых языках программирования, поскольку все они по сути своей одинаковы.