Как удалить все записи или очистить пользовательскую таблицу базы данных?

4 дек. 2013 г., 19:59:00
Просмотры: 26.8K
Голосов: 11

Я не могу найти простой надежный способ сделать это - возможно так?:

// удаление строки ##
global $wpdb;
$delete = $wpdb->query( 
    $wpdb->prepare( 
         "DELETE * FROM `wp_table_name`"
    )
);

// возвращаемое значение ##
$return = __('Таблица очищена.');
if ( $wpdb->last_error ) {
    $return = $wpdb->last_error;
}

Но это выдает классическую ошибку:

У вас ошибка в синтаксисе SQL; проверьте руководство, соответствующее вашей версии MySQL сервера, для правильного синтаксиса рядом с '* FROM wp_table_name' в строке 1

5
Комментарии

Не уверен, но разве не следует использовать $wpdb вместо $this?

GhostToast GhostToast
4 дек. 2013 г. 20:07:10

SQL выглядит правильно, если у вас есть таблица с именем wp_table_name, в чем я сомневаюсь. Также есть truncate. Хотя не понимаю, как это относится к WordPress.

s_ha_dum s_ha_dum
4 дек. 2013 г. 20:11:19

@s_ha_dum - спасибо, table_name находится в белом списке.. Думаю, использование $wpdb делает этот вопрос относящимся к WP.. Это плагин для WP, использующий таблицу в БД WP.. Я добавил ответ ниже - еще раз спасибо!

Q Studio Q Studio
4 дек. 2013 г. 20:17:00

Но это не ошибка $wpdb. Это просто ошибка SQL.

s_ha_dum s_ha_dum
4 дек. 2013 г. 20:53:05

разве по той же логике все ошибки WordPress не являются ошибками PHP ;)

Q Studio Q Studio
4 дек. 2013 г. 23:29:23
Все ответы на вопрос 4
0
15

Я бы просто изменил пример Q Studio на:

global $wpdb;
$table  = $wpdb->prefix . 'table_name';
$delete = $wpdb->query("TRUNCATE TABLE $table");
22 февр. 2016 г. 04:36:43
0
13

Спасибо @s_ha_dum - TRUNCATE отлично справляется с задачей:

// удалить строку ##
global $wpdb;
$delete = $wpdb->query("TRUNCATE TABLE `wp_table_name`");
4 дек. 2013 г. 20:19:25
0

Опоздал на 2 года, но, возможно, это поможет кому-то в будущем :)

Правильный синтаксис для удаления строк из таблицы MySQL:

DELETE FROM `wp_table_name`
WHERE 1 = 1;
15 дек. 2015 г. 21:00:29
0

Этот ответ запоздал, и уже был принят другой. Но никто не упомянул, что ваш SQL-запрос DELETE некорректен. Попробуйте так:

DELETE FROM `wp_table_name`

Однако, это всё ещё может не сработать. Возможно, вам потребуется изменить настройки MariaDB/MySQL, которые защищают от таких удалений, чтобы предотвратить случайное удаление всех данных. Чтобы это сработало, вам нужно:

DELETE FROM `wp_table_name` WHERE `some_column` = 'some_value'

Удачи

5 мар. 2017 г. 01:02:19