Проблемы на Wordpress с ошибкой wpdb::prepare()

Y5
На сайте с 14.07.2009
Offline
119
844

Добрый день!

При работе с одним из плагинов стали вылезать ошибки и зависать сервер с переполнением памяти.

В частности, очень много вылезает ошибок из плагина focal:

PHP Warning: Missing argument 2 for wpdb::prepare(), called in /var/www/mysites/data/www/site.ru/wp-content/plugins/folding-category-widget/focal_wp28.php on line 768 and defined in /var/www/mysites/data/www/site.ru/wp-includes/wp-db.php on line 1246

Ссылка ведет на строчку:

$querystr = $wpdb->prepare($querystr);

Вот часть кода:


foreach ($children as $cat) {
$querystr = "
SELECT DISTINCT $wpdb->posts.ID
FROM $wpdb->term_taxonomy, $wpdb->posts, $wpdb->term_relationships
WHERE $wpdb->posts.ID = $wpdb->term_relationships.object_id
AND $wpdb->term_relationships.term_taxonomy_id = $wpdb->term_taxonomy.term_taxonomy_id
AND $wpdb->term_taxonomy.term_id = $cat->term_id
AND $wpdb->posts.post_status = 'publish'
AND $wpdb->posts.post_type = 'post'
AND $wpdb->posts.post_date < NOW()
";
$querystr = $wpdb->prepare($querystr);
$result = $wpdb->get_results($querystr, ARRAY_A);

if ($result)
foreach ($result as $id)
$subcatposts[] = $id["ID"];
}

Подскажите пожалуйста, что с этой строчкой "не то" и как это можно исправить?

Большое спасибо!

Подписи пока нет :(
S
На сайте с 30.09.2016
Offline
469
#1

Ну и задайте второй аргумент, который требуется на строке 1246.

Отпилю лишнее, прикручу нужное, выправлю кривое. Вытравлю вредителей.
K5
На сайте с 21.07.2010
Offline
209
#2
аська 45два48499два записки на работе (http://memoryhigh.ru) помогу с сайтом, удалю вирусы, настрою впс -> отзывы ТУТ (/ru/forum/836248) и ТАМ (http://www.maultalk.com/topic140187.html) !!!всегда проверяйте данные людей, которые сами пишут вам в аську или скайп!!!
S
На сайте с 30.09.2016
Offline
469
#3

kgtu5, так тоже даст ошибку, скорее всего. Лучше как-то так:

foreach ($children as $cat) {
$querystr = "
SELECT DISTINCT $wpdb->posts.ID
FROM $wpdb->term_taxonomy, $wpdb->posts, $wpdb->term_relationships
WHERE $wpdb->posts.ID = $wpdb->term_relationships.object_id
AND $wpdb->term_relationships.term_taxonomy_id = $wpdb->term_taxonomy.term_taxonomy_id
AND $wpdb->term_taxonomy.term_id = $cat->term_id
AND $wpdb->posts.post_status = %s
AND $wpdb->posts.post_type = %s
AND $wpdb->posts.post_date < NOW()
";
$querystr = $wpdb->prepare($querystr, 'publish', 'post');
$result = $wpdb->get_results($querystr, ARRAY_A);

if ($result)
foreach ($result as $id)
$subcatposts[] = $id["ID"];
}

Или вообще это фуфло не писать, а закомментировать строку.

Y5
На сайте с 14.07.2009
Offline
119
#4
Sitealert:
kgtu5, так тоже даст ошибку, скорее всего. Лучше как-то так:
foreach ($children as $cat) {

$querystr = "
SELECT DISTINCT $wpdb->posts.ID
FROM $wpdb->term_taxonomy, $wpdb->posts, $wpdb->term_relationships
WHERE $wpdb->posts.ID = $wpdb->term_relationships.object_id
AND $wpdb->term_relationships.term_taxonomy_id = $wpdb->term_taxonomy.term_taxonomy_id
AND $wpdb->term_taxonomy.term_id = $cat->term_id
AND $wpdb->posts.post_status = %s
AND $wpdb->posts.post_type = %s
AND $wpdb->posts.post_date < NOW()
";
$querystr = $wpdb->prepare($querystr, 'publish', 'post');
$result = $wpdb->get_results($querystr, ARRAY_A);

if ($result)
foreach ($result as $id)
$subcatposts[] = $id["ID"];
}

Или вообще это фуфло не писать, а закомментировать строку.

Если строку эту убрать, то не будет защиты БД от взлома...

S
На сайте с 30.09.2016
Offline
469
#5
yura5:
Если строку эту убрать, то не будет защиты БД от взлома...

А Вы думаете, что в том виде, как оно у Вас написано, будет защита? Ошибаетесь! 😂

Защита должна быть путём обработки аргументов, которые могут быть кем-то подделаны, а не путём вставки запроса и получения на выходе его же.

Впрочем, надеюсь, проблема уже решена? Потому что и я предложил, как мне кажется, рабочий вариант, и там, где Вы ещё задавали этот вопрос, - maultalk.com - тоже предложили аналогичный вариант, и Вы можете эти варианты творчески переработать если хотите...:)

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий