![](/img/trans.png)
[英]MySQL query works from phpMyAdmin and returns rows, but $wpdb->get_results return nothing
[英]Wordpress $wpdb->get_results returns an empty array but phpMyAdmin returns multiple rows. Why?
我的 WordPress 插件代碼如下所示:
$table = $wpdb->prefix."cf_form_entry_values";
$where = "entry_id = ".$entryid;
$select = "SELECT id FROM {$table} WHERE {$where}";
$query = $wpdb->prepare( $select );
$result = $wpdb->get_results( $query );
它產生以下 mysql 查詢:SELECT id FROM wpqs_cf_form_entry_values WHERE entry_id = 49
WordPress 返回一個空數組。 沒有報告 SQL 錯誤(我設置了 show_errors()),var_dump 為空。 但是,如果我將該查詢剪切並粘貼到 phpMyAdmin 中,它會返回預期的行。 我不明白為什么 WordPress 給我的結果是空的。 我也試過 SELECT * FROM wpqs_cf_form_entry_values WHERE entry_id = 49
我注意到如果我刪除 WHERE 子句,WordPress 很樂意將整個表返回給我,但為什么我不能用 WHERE 子句過濾它?
進一步測試后的更多信息……很好奇什么有效,什么無效。
這兩個查詢不起作用:
SELECT * FROM wpqs_cf_form_entry_values WHERE entry_id = 55 AND slug = 'photo'
SELECT * FROM wpqs_cf_form_entry_values WHERE entry_id = 55
但是這個確實:
SELECT * FROM wpqs_cf_form_entry_values WHERE slug = 'photo'
我試過將 entry_id 值放在引號中和不加引號。 這些額外的信息對任何人有幫助嗎?
您能否嘗試添加此代碼?
$wpdb->show_errors( true )
也許它會顯示一些關於它為什么不起作用的信息。 您是否嘗試在沒有 PHP 變量的情況下編寫,例如完整的字符串?
也試着把桌子放在 qoutes
SELECT * FROM `wpqs_cf_form_entry_values`
我還注意到 SELECT 中缺少 entry_id 你應該像這樣:
SELECT id,entry_id FROM `wpqs_cf_form_entry_values`
也嘗試放在文件的頂部
global $wpdb
$where = "entry_id = ".$entryid; 我想 $entryid 應該被包裹在 ''
沒有為wpdb->prepare()
方法正確設置 select 語句。
$wpdb->prepare()
需要 2 arguments。1) select 語句 2) 語句中變量的值。
其中值是一個數字:
"select * from table where id = %d";
其中值是一個字符串:
"select * from table where name = %s";
價值是“浮動”的地方:
"select * from table where id = %f";
其中 value 是混合的(任何數字或混合都是可能的):
"select * from table where id = %d OR name = %s OR price = %f";
%d
, %s
, %f
是 select 語句中唯一應該為 go 的 3 個值,該語句將被發送到wpdb->prepare()
在您的情況下,ASSUMING entry_id 是 integer,應按如下方式創建語句:
$table = $wpdb->prefix."cf_form_entry_values";
$where = "entry_id = %d";
$select = "SELECT id FROM $table WHERE $where";
第二個參數是替換“sprintf 格式”的一個或多個值。 這些必須按照它們在 select 語句中出現的順序排列。 在您的情況下,唯一的值是$entryid
。 我在數組中傳遞這些值,但它們可以單獨傳遞。 在您的情況下,我將按如下方式傳遞 select 語句和$entryid
:
$prepared_statement = $wpdb->prepare( $select,[$entryid] );
$results = $wpdb->get_results($prepared_statement);
請注意,我已將您的$result
變量更改為$results
因為此$wpdb->get_results()
用於返回多行。 如果您期望單行,最好將$wpdb->get_row()
與您准備好的語句一起使用。
更多信息:https://developer.wordpress.org/reference/classes/wpdb/prepare/
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.