Вопрос или проблема
Сначала я вручную пишу запросы обновления, удаления, вставки и выборки и выполняю данные с помощью функции 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 для управления данными!