PDO Update 1 столбец несколько строк с массивом

Я изо всех сил пытаюсь найти хороший способ обновить один столбец моего wcx_options Таблица.

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

Я предполагал, что смогу перебрать каждый столбец путем обновления option_id значениями из массива.

База данных:

База данных wcx_options

Я обновляю option_value колонка с новой информацией через jQuery AJAX Call к контроллеру, который затем вызывает функцию из backend class,

Пока у меня есть следующий код:

if(isset($_POST['selector'])) {

if($_POST['selector'] == 'general') {
if($_SERVER['HTTP_X_REQUESTED_WITH'] == 'XMLHttpRequest' && isset($_POST['token'])
&& $_POST['token'] === $_SESSION['token']){

$site_name = $_POST['sitename'];
$site_url = $_POST['siteurl'];
$site_logo = $_POST['sitelogo'];
$site_tagline = $_POST['sitetagline'];
$site_description = $_POST['sitedescription'];
$site_admin = $_POST['siteadmin'];
$admin_email = $_POST['adminemail'];
$contact_info = $_POST['contactinfo'];
$site_disclaimer = $_POST['sitedisclaimer'];
$TimeZone = $_POST['TimeZone'];

$options = array($site_name, $site_url, $site_logo, $site_tagline, $site_description, $site_admin, $admin_email,$contact_info, $site_disclaimer, $TimeZone);

// Send the new data as an array to the update function
$backend->updateGeneralSettings($options);
}
else {
$_SESSION['status'] = '<div class="error">There was a Problem Updating the General Settings</div>';
}
}
}

Это то, что я до сих пор с точки зрения функции (это не работает):

public function updateGeneralSettings($options) {
$i = 1;
foreach($options as $option_value) {
$where = array('option_id' => $i);
$this->queryIt("UPDATE wcx_options SET option_value='$option_value' WHERE option_id='$where'");
$i++;
}
if($this->execute()) {
$_SESSION['success'] = 'Updated General Settings Successfully';
}
}

1

Решение

С учетом данной структуры DB я бы предложил организовать ваши данные в виде вспомогательного массива, используя имена полей db, например:

$option = array(
'site_name' => $_POST['sitename'],
'site_url' => $_POST['siteurl'],
// etc.
'timeZone' => $_POST['TimeZone']
);

И чем использовать ключи в вашем запросе:

public function updateGeneralSettings($options) {
foreach($options as $key => $value) {
$this->queryIt("UPDATE wcx_options SET option_value='$value' WHERE option_name='$key'");
if($this->execute()) {
$_SESSION['success'] = 'Updated General Settings Successfully';
}
}

}

(Тем не менее, вы уверены, что не хотите, чтобы все параметры были в одном ряду?)

1

Другие решения

Измените свой запрос, вы пытаетесь использовать массив как where состояние. В используемом вами синтаксисе это не сработает. Просто используйте счетчик как where условие вместо определения $where переменная. Попробуй это:

public function updateGeneralSettings($options) {
$i = 1;
foreach($options as $option_value) {
$this->queryIt("UPDATE wcx_options SET option_value='$option_value' WHERE option_id='$i'");
$i++;
}
if($this->execute()) {
$_SESSION['success'] = 'Updated General Settings Successfully';
}
}
0

По вопросам рекламы [email protected]