2016-10-19 2 views
1

У меня есть функция, которая работает хорошо, когда я говорюWordpress PHP переменные в get_results()

$results = $wpdb->get_results(
       "SELECT meta_value 
       FROM wp_woocommerce_order_itemmeta 
       WHERE order_item_id = '21' 
       AND meta_key = '_qty" 
      ); 

Эта функция возвращает 4, который является правильный номер, я бы искал в моей базе данных.

К сожалению, этот код возвращает пустой массив к get_results(). Что-то не так в моем коде с передачей переменной в $ wpdb, у кого-нибудь есть идея?

$results = $wpdb->get_results(
       "SELECT meta_value 
       FROM wp_woocommerce_order_itemmeta 
       WHERE order_item_id =" .$order_item_id. 
       "AND meta_key = '_qty'" 
      ); 
+0

, что строка будет вычисляться ' "SELECT meta_value FROM wp_woocommercer_order_itemmeta WHERE order_item_id = 24 И meta_key = «_qty'" 'Я считаю, что ваш вопрос не из пробелов в ваша строка между вашей переменной и следующей строкой ввода. "24AND" – Luke

+0

СПАСИБО ВАС !!!!!!! –

+0

Ознакомьтесь с моим ответом ниже, чтобы помочь вам избежать такой же проблемы в будущем – Luke

ответ

1

В этом конкретном случае я считаю, что это простая проблема с отсутствием пробела в конкатенации строк. Однако может быть более подходящим способом подготовить Ваше заявление, что предотвратило бы это, что делает его легче обнаружить, и следует другие хорошие практики построения запросов

Wordpress Подготовленные Statments
С помощью $wpdb->prepare() вы можете использовать (наиболее of) синтаксис sprintf(), который поможет вам построить ваш запрос.

$query = $wpdb->prepare("SELECT meta_value 
      FROM wp_woocommerce_order_itemmeta 
      WHERE order_item_id = %d 
      AND meta_key = '_qty'", $order_item_id); 
$results = $wpdb->get_results($query); 

Более подробную информацию можно получить в wordpress codex и prepared statements in general

Смежные вопросы