Вы должны положиться на подготовленные заявления.
Создавайте имена столбцов только с использованием белого списка в качестве динамического SQL. Отфильтруйте пустые строки ''
. Вставьте анонимные подготовленные параметры оператора ?
и сгенерируйте строку спецификатора типа. Затем передайте значения в качестве связанных параметров.
Это должно сработать (пока не смог проверить).
<?php
declare (strict_types=1);
$km_user_id = 2;
// this array comes from the form
$form_array =
[
'km_user_first_name' => 'Antonio',
'km_user_last_name' => 'Acri',
'km_user_address' => 'via pola',
'km_user_city' => 'roma',
'km_user_city_prov' => '',
'km_user_postcode' => '',
'km_user_email' => '',
'km_user_website' => 'url',
'km_user_telephone' => '123456',
'km_user_mobile' => '',
'km_user_fiscalcode' => '',
'km_user_document' => '',
'km_user_document_number' => '',
'km_user_document_exp' => '',
'km_user_birth_place' => '',
'km_user_birth_date' => '',
];
$white_list =
[
'DEBUGkm_user_first_name' => true, // DEBUG TEST filter
'km_user_last_name' => true,
'km_user_address' => true,
'km_user_city' => true,
'km_user_city_prov' => true,
'km_user_postcode' => true,
'km_user_email' => true,
'km_user_website' => true,
'km_user_telephone' => true,
'km_user_mobile' => true,
'km_user_fiscalcode' => true,
'km_user_document' => true,
'km_user_document_number' => true,
'km_user_document_exp' => true,
'km_user_birth_place' => true,
'km_user_birth_date' => true,
];
// filter by whitelist and remove '' but NOT '0'
$non_empty = array_intersect_key(array_filter($form_array, function($v){return $v !== '';}), $white_list);
if(!empty($non_empty))
{
$cols = '`' . implode('` = ?, `', array_keys($non_empty)) . ' = ?';
$query = "UPDATE `users` SET $cols WHERE `user_id` = ?";
$values = array_values($non_empty);
array_push($values, $km_user_id);
$stmt = mysqli_prepare($db_user_conn, $query);
mysqli_stmt_bind_param($stmt, str_repeat('s', count($non_empty)).'i', ...$values);
mysqli_stmt_execute($stmt);
// TODO: error handling
}
km_user_first_name
не следует обновлять, поскольку его нет в белом списке. Удалите префикс DEBUG
при тестировании.
Вы не можете использовать агента SQL Server в SQL Server Express. Путем я сделал это, прежде чем должен будет создать Сценарий SQL и затем выполнить его как запланированную задачу каждый день, у Вас могло быть несколько запланированных задач для помещений с расписанием резервного копирования / в хранение. Команда, которую я использую в запланированной задаче:
"C:\Program Files\Microsoft SQL Server\90\Tools\Binn\SQLCMD.EXE"-i "c:\path\to\sqlbackupScript.sql"
Мы использовали комбинацию:
Резервное копирование Cobian для планирования/обслуживания
ExpressMaint для резервного копирования
Оба из них свободны. Процесс должен написать сценарий ExpressMaint для взятия резервного копирования в качестве Cobian "перед Резервным" событием. Я обычно позволяю этой перезаписи предыдущий файл резервной копии. Cobian затем вынимает zip/7zip из этого и архивирует их к резервной папке. В Cobian можно указать количество полных копий, чтобы сохранить, сделать несколько резервных циклов и т.д.
пример синтаксиса команды ExpressMaint:
expressmaint -S HOST\SQLEXPRESS -D ALL_USER -T DB -R logpath -RU WEEKS -RV 1 -B backuppath -BU HOURS -BV 3
У сотрудников MSSQLTips есть несколько очень полезных статей, одна из которых наиболее актуальна для этого - « Автоматизация резервного копирования SQL Server 2005 Express и удаление старых файлов резервных копий »
Базовый подход - настроить две задачи с помощью Планировщика задач Windows. Одна задача запускает сценарий TSQL, который создает отдельные файлы резервных копий для всех баз данных MSSQL (кроме TEMPDB) с именем базы данных и меткой даты / времени в имени файла в указанном каталоге. Вторая задача запускает сценарий VBScript, который проходит через этот каталог и удаляет все файлы с расширением .BAK, возраст которых превышает 3 дня.
Оба сценария требуют незначительного редактирования для вашей среды (пути, как долго хранить эти дампы базы данных), но они очень близки к тому, чтобы запустить и запустить.
Обратите внимание, что есть возможные последствия для безопасности, если вы небрежно с ними или с разрешениями каталога, так как это простые текстовые файлы, которые необходимо запускать с определенным уровнем привилегий. Не будьте небрежны.