Вопрос

У меня есть этот код для удаления потерянных записей после удаления пользовательского типа записи.

Это работает, но этот код...

global $wpdb;
$wpdb->query( 
    $wpdb->prepare( 
    "DELETE a,b,c FROM wp_posts a
    LEFT JOIN wp_term_relationships b ON (a.ID=b.object_id)
    LEFT JOIN wp_postmeta c ON (a.ID=c.post_id)
    WHERE a.post_type='attorneys'"
  )
);

...выдает эту ошибку:

Уведомление о PHP:был вызван wpdb::prepare неправильно.Аргумент запроса wpdb::prepare() должен содержать заполнитель.

Итак, после прочтения объяснение на make.wordpress.org Эндрю Насина, я (вроде как) так понимаю...хорошо..Мне не хватает второго аргумента.

Затем, после прочтения этот пост из стека, Я задаюсь вопросом, нужен ли мне вообще этот prepare() функция. Здесь какие-нибудь переменные, содержащие неизвестные значения?Мне это не совсем ясно.

...что я упускаю?

ОБНОВЛЕНИЕ:Этот код также работает, но без функции prepare() мне интересно, безопасно ли это.

global $wpdb;
$wpdb->query( 
  "DELETE a,b,c FROM wp_posts a
  LEFT JOIN wp_term_relationships b ON (a.ID=b.object_id)
  LEFT JOIN wp_postmeta c ON (a.ID=c.post_id)
  WHERE a.post_type='attorneys'"
);

Пожалуйста, посоветуйте.

Это было полезно?

Решение

Всегда рекомендуется использовать $wpdb->prepare когда вы принимаете вводимые данные от пользователя.Это поможет защитить запросы от SQL-инъекции.Для получения более подробной информации ознакомьтесь с Кодекс

Когда вы используете $wpdb->prepare, вы должны передать переменные в запрос.В вашем случае вы можете пропустить использование $wpdb->prepare поскольку вы используете жестко закодированное значение.Но если у вас есть такое же значение в терминах переменной, вам нужно изменить его, как показано ниже

$post_type = 'attorneys';

$wpdb->query( 
     $wpdb->prepare(
          "DELETE a,b,c FROM wp_posts a
          LEFT JOIN wp_term_relationships b ON (a.ID=b.object_id)
          LEFT JOIN wp_postmeta c ON (a.ID=c.post_id)
          WHERE a.post_type=%s",
          $post_type
     )
);
Лицензировано под: CC-BY-SA с атрибуция
Не связан с wordpress.stackexchange
scroll top