簡體   English   中英

Wordpress $wpdb->get_results 返回一個空數組,但 phpMyAdmin 返回多行。 為什么?

[英]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) 語句中變量的值。

  1. select 語句應按以下方式使用“sprintf 格式”創建:

其中值是一個數字:

"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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM