Необходимо переписать старый код на новый с использованием транзакций из PDO. Есть вот такая конструкция с DELETE:
if ($month && $day && $year && $div) {
$result_ok = dbq("DELETE FROM $dbtable[visit] WHERE id_worker='" . $ar[id] . "' AND sdate='" . date('Y-n-j', $date) . "'");
}
И с INSERT:
if ($month && $day && $year && $div) {
$result_ok = dbq("INSERT INTO $dbtable[visit] (id, id_worker, sdate, sdate_int, status, hours, id_author, cdate)
VALUES (NULL, '" . $ar[id] . "', '" . date('Y-n-j', $date) . "', '" . $date . "', '" . $f_visit[$ar[id]] . "', '" . $f_hours[$ar[id]] . "', '$user_id', '$now[time]')");
$f_id = mysql_insert_id();
}
Функция dbq:
// Выполнение запроса к БД, v.1.1
function dbq ($cmd)
{
GLOBAL $dbq_msg,$numrows;
$result = @mysql_query($cmd);
if ($result) {
if ($dbq_msg=="a") echo "<br><b>SQL Ok</b>: $cmd";
$numrows=@mysql_numrows($result);
} else {
if ($dbq_msg=="e" or $dbq_msg=="a") echo "<br><b>SQL Error</b>: ".mysql_error();
}
return $result;
}
Как это правильно переписать на PDO, чтоб безопасно было и в случае чего не удалялось лишнего?
В целом главное отличие - это передача переменных не напрямую в текст запроса, а в качестве массива. При этом в местах, где переменная должна появиться, ставится вопросительный знак.
$a = "foo";
$b = "bar";
$sql = $_database->prepare('INSERT INTO `tablename` (a, b) VALUES (?, ?)');
$result = $sql->execute([ $a, $b ]);
// >> INSERT INTO `tablename` (a, b) VALUES ('foo', 'bar')
Подключение
$_database = new PDO('mysql:host=localhost;dbname=database', 'user', 'password');
Удаление
$sql = $_database->prepare('DELETE FROM '.$dbtable['visit'].' WHERE id_worker=? AND sdate=?');
$result = $sql->execute([
$ar['id'],
date('Y-n-j', $date)
]);
Добавление
$sql = $_database->prepare('INSERT INTO '.$dbtable['visit'].' (id, id_worker, sdate, sdate_int, status, hours, id_author, cdate) VALUES (NULL, ?, ?, ?, ?, ?, ?, ?)');
$result = $sql->execute([
$ar['id'],
date('Y-n-j', $date),
$date,
$f_visit[$ar['id']],
$f_hours[$ar['id']],
$user_id,
$now['time']
]);
Апостиль в Лос-Анджелесе без лишних нервов и бумажной волокиты
Основные этапы разработки сайта для стоматологической клиники
Продвижение своими сайтами как стратегия роста и независимости