Как использовать запросы обновления и удаления в WordPress

Вопрос или проблема

Сначала я вручную пишу запросы обновления, удаления, вставки и выборки и выполняю данные с помощью функции mysql_query

Как это:

Запрос на выборку

$prefix = $wpdb->prefix;
$postSql = "SELECT DISTINCT post_id
            FROM " . $prefix . "postmeta As meta
            Inner Join " . $prefix . "posts As post
            On post.ID = meta.post_id
            Where post_type='product' 
            And post_status='publish'
            And meta_key Like '%product_img%'";
$postQry = mysql_query($postSql);
while ($postRow = mysql_fetch_array($postQry)) {
     $post_id = $postRow['post_id'];
}

Запрос на вставку

$insert_images = "Insert Into " . $prefix . "postmeta(post_id,meta_key,meta_value) Value('$post_id','$meta_key','$data_serialize')";
        mysql_query($insert_images);

Запрос на обновление:

$update_price = "Update " . $prefix . "postmeta
                         Set meta_key = 'wpc_product_price'
                         Where post_id = $supportMetaID
                         And meta_key Like '%product_price%'";
 mysql_query($update_price);

Запрос на удаление

mysql_query("Delete From " . $prefix . "postmeta Where meta_key IN ('product_img1','product_img2','product_img3')");

Все запросы работают прекрасно… но теперь я хочу встроить все запросы в запросы WordPress.

Я также могу использовать запросы WordPress, как

$wpdb->get_results( "SELECT id, name FROM mytable" );
$wpdb->insert( 
    'table', 
    array( 
        'column1' => 'value1', 
        'column2' => 123 
    ), 
);
$wpdb->update( 
    'table', 
    array( 
        'column1' => 'value1',  // строка
        'column2' => 'value2'   // целое число 
    ), 
    array( 'ID' => 1 )
);
$wpdb->delete( 'table', array( 'ID' => 1 ) );

Но вы можете видеть, что я использую условия and / or в своих запросах. Так что кто-нибудь помогите мне, как я могу встроить свои запросы в WordPress

О UPDATE+INSERT:

Я создал функцию для себя, которая может помочь и вам, т.е. :

UPDATE_OR_INSERT('wp_users',  array('gender'=>'female'), array('name'=>'Monika') );

которая обновит ЗНАЧЕНИЕ в колонке (где name=monika), но в случае, если значение не существует, она создаст новую запись в БД.
Почему это необходимо? потому что, насколько я знаю, нет сложной функции WP, которая обновляет данные в БД (если значение существует) или вставляет данные (если не существует). Вместо этого мы используем: $wpdb->update() или $wpdb->insert().
Так что используйте эту функцию, она поможет:

function UPDATE_OR_INSERT($tablename, $NewArray, $WhereArray){          global $wpdb; $arrayNames= array_keys($WhereArray);
    //конвертировать массив в СТРОКУ
    $o=''; $i=1; foreach ($WhereArray as $key=>$value){ $o .= $key . ' = \''. $value .'\''; if ($i != count($WhereArray)) { $o .=' AND '; $i++;}  }
    //проверить, существует ли уже
    $CheckIfExists = $wpdb->get_var("SELECT ".$arrayNames[0]." FROM ".$tablename." WHERE ".$o);
    if (!empty($CheckIfExists))  { return $wpdb->update($tablename, $NewArray,  $WhereArray );}
    else                         { return $wpdb->insert($tablename,     array_merge($NewArray, $WhereArray) );  } 
}

Запрос на обновление:

$table = $wpdb->prefix . 'tablename';

$wpdb->update( $table_name, array( 'role_id' => 1),array('user_id'=>$user_id));

Запрос на удаление:

$wpdb->delete( $table, array( 'id' => $id ) );

Ответ или решение

Как использовать запросы update и delete в WordPress

WordPress предоставляет мощные средства для работы с базой данных, позволяя разработчикам легко манипулировать данными. В этой статье мы подробно рассмотрим, как использовать SQL-запросы UPDATE и DELETE в WordPress, а также как безопасно интегрировать их в ваши функции.

Подход к работе с базой данных в WordPress

WordPress использует класс $wpdb, который предоставляет интерфейс для работы с базой данных MySQL. Этот класс обеспечивает безопасность запросов и защищает от SQL-инъекций через автоматическую экранирование входных данных. Вместо использования устаревших функций, таких как mysql_query, рекомендуется использовать методы класса $wpdb.

Обновление данных: Запрос UPDATE

Чтобы обновить данные в таблице WordPress, вы можете использовать метод $wpdb->update(). Этот метод принимает три аргумента: имя таблицы, массив данных для обновления, а также условия, которые должны быть выполнены для выбора нужных строк.

Пример запроса UPDATE:

global $wpdb;

// Установка имени таблицы
$table_name = $wpdb->prefix . 'postmeta';

// Обновление цен для определенного поста
$post_id = 123; // Идентификатор поста
$new_price = 25.99;

$wpdb->update(
    $table_name,
    array('meta_value' => $new_price), // Данные для обновления
    array('post_id' => $post_id, 'meta_key' => 'wpc_product_price') // Условия выбора
);

Этот код обновляет значение meta_value на 25.99 для метаданных поста с ID 123, где meta_key равно wpc_product_price.

Удаление данных: Запрос DELETE

Метод $wpdb->delete() используется для удаления записей из базы данных. Он также принимает три аргумента: имя таблицы, условия для удаления и, опционально, массив дополнительных аргументов.

Пример запроса DELETE:

global $wpdb;

// Установка имени таблицы
$table_name = $wpdb->prefix . 'postmeta';

// Удаление изображений продукта из метаданных
$wpdb->delete(
    $table_name,
    array('meta_key' => 'product_img1'),
    array('meta_key' => 'product_img2'),
    array('meta_key' => 'product_img3')
);

Данный код удаляет все записи из таблицы postmeta, у которых meta_key соответствует значениям product_img1, product_img2 и product_img3.

Совмещение UPDATE и INSERT: Функция UPDATE_OR_INSERT

В WordPress нет встроенной функции для одновременного обновления или вставки данных. Однако вы можете создать свою функцию для этого.

Пример функции UPDATE_OR_INSERT:

function UPDATE_OR_INSERT($tablename, $NewArray, $WhereArray) {
    global $wpdb;
    $arrayNames = array_keys($WhereArray);

    // Преобразование массива в строку для SQL-запроса
    $conditions = '';
    foreach ($WhereArray as $key => $value) {
        $conditions .= $key . ' = "'. $value .'" AND ';
    }
    $conditions = rtrim($conditions, ' AND '); // Удаление последнего ' AND '

    // Проверка существования записи
    $CheckIfExists = $wpdb->get_var("SELECT " . $arrayNames[0] . " FROM " . $tablename . " WHERE " . $conditions);

    if (!empty($CheckIfExists)) {
        return $wpdb->update($tablename, $NewArray, $WhereArray);
    } else {
        return $wpdb->insert($tablename, array_merge($NewArray, $WhereArray));
    }
}

Вы можете использовать эту функцию для updated_or_insert записи в таблицу, передавая нужные массивы данных.

Заключение

Работа с запросами UPDATE и DELETE в WordPress с помощью класса $wpdb не только делает ваш код более безопасным, но и упрощает взаимодействие с базой данных. Вы всегда должны стремиться использовать встроенные методы WordPress для предотвращения ошибок и обеспечения безопасности.

Надеюсь, данное руководство поможет вам более эффективно использовать возможности WordPress для управления данными!

Оцените материал
Добавить комментарий

Капча загружается...