Intereting Posts
Как вы регистрируете пользователя с помощью wp_logout? Не публикуйте и не создавайте, если почта уже существует Почему я не могу добавить скриптовый код в настройки темы без 403-запрещенных? Вложение видео Youtube в комментарии Переадресовать цикл при попытке войти в / wp-admin / Редактирование списка нескольких полей Как создать пограничный фильтр Post Post с помощью мета запроса Как отключить отображение виджета на мобильном сайте? Добавление дополнительного адреса электронной почты, который получает электронную почту как admin – woocommerce Почему в этой строке кода появляются фотоальбомы? Перезаписать стили style.css из стиля index.php Получить дату числовой и отдельной? Как var_dump элементы меню навигации из любого места? помочь расшифровать метаданные wp Можете ли вы исключить дочерние страницы определенного родителя в рамках навигации?

Неправильное использование wpdb :: prepare ()

Не уверен, что я делаю неправильно здесь. Я не писал этот код, но я получаю следующую ошибку в WordPress:

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

<?php echo '<div class="client_list"><input type="checkbox" name="check_all" value="0" class="" id="check_all" /> Check All</div>'; $send_message_lists = get_post_meta($post->ID, wpvbxcon::smslist_smsclient, true); if(!is_array($send_message_lists)) $send_message_lists = array(); //print_r($send_message_lists); foreach($lists as $list) { $q = "SELECT COUNT(*) FROM $wpdb->postmeta m JOIN $wpdb->posts p ON p.ID = m.post_id WHERE meta_key = '_wpvbx_subscription' AND meta_value = $list->ID AND post_status = 'publish';"; $subscriber_count = $wpdb->get_var($wpdb->prepare($q)); $checked = ''; if(in_array($list->ID, $send_message_lists)) $checked = 'checked="checked"'; if( current_user_can( '_wpvbx_access_list_'.$list->ID ) || current_user_can('administrator') ) printf('<div class="client_list"><input type="checkbox" name="lists[]" value="%d" class="list" %s /> %s (%d)</div>', $list->ID, $checked, $list->post_title, $subscriber_count); } echo '<div style="clear:both;"> </div>'; ?> 

Solutions Collecting From Web of "Неправильное использование wpdb :: prepare ()"

Вы должны попытаться заменить meta_value = $list->ID часть на meta_value = %d . Затем используйте следующее:

 $subscriber_count = $wpdb->get_var( $wpdb->prepare( $q, $list->ID ) ); 

где входной аргумент $list->ID будет рассматриваться как целое (подписанное).

Из Кодекса :

Параметр запроса для подготовки принимает sprintf() -подобные заполнители. Поддерживаются форматы %s (строка), %d (целое число) и %f (float). (Области %s и %d были доступны, поскольку функция была добавлена ​​в ядро ​​в версии 2.3, %f была доступна только с версии 3.3.) Любые другие символы% могут приводить к ошибкам синтаксического анализа, если они не экранированы. Все % символов внутри строковых литералов SQL, включая подстановочные знаки LIKE , должны быть удвоены в % от %% . Все %d , %f и %s должны быть оставлены без кавычек в строке запроса. Обратите внимание, что заполнитель %d принимает только целые числа, поэтому вы не можете передавать числа с запятыми через %d . Если вам нужны значения запятой, вместо этого используйте %f как float.