2016-02-18 54 views
0

工作傳統的查詢:轉換爲的sprintf()查詢

$form_id = Caldera_Forms::get_field_data('_entry_id', $form); 
$post_id_qry = mysql_query("SELECT `meta_value` FROM wp_cf_form_entry_meta WHERE entry_id = '$form_id' and meta_key = 'ID'"); 
$post_id = mysql_fetch_array($post_id_qry); 
echo $post_id['meta_value']; 

現在,當我轉換到一個sprintf的(),使之更加安全,並返回空白。我試過了一個語法檢查,它回來乾淨。有任何想法嗎?

$form_id = Caldera_Forms::get_field_data('_entry_id', $form); 
global $wpdb; 
$post_id_qry = sprintf("SELECT `meta_value` FROM %s WHERE entry_id = %d and meta_key = 'ID'", $wpdb->prefix . 'cf_form_entry_meta', $form_id); 
$post_id = $wpdb->get_results($post_id_qry); 
echo $post_id['meta_value']; 
+0

嘗試回顯生成的$ post_id_qry並查看它說了什麼。然後在數據庫中運行它,以確保您獲得正確的查詢。 –

+0

你得到正確的查詢,你的代碼是正確的,我認爲。 –

+0

您需要確保您在表格和其他相關from和where子句中的表單id和適當的值中獲得適當的值。 –

回答

0

$wpdb->get_results()返回查詢,而不僅僅是一個單一行的所有結果的數組。默認情況下,行是對象,而不是關聯數組。所以你需要做:

echo $post_id[0]->meta_value; 

要顯示的值。

如果你想獲得一個單列作爲關聯數組,使用方法:

$post_id = $wpdb->get_row(ARRAY_A); 
echo $post_id['meta_value']; 

注意,WP不會有什麼類似於mysql_fetch_arrayget_row的選項是ARRAY_A,它類似於mysql_fetch_assocARRAY_N,與mysql_fetch_row相似。