使用动态表名的Wpdb查询

时间:2021-05-11 作者:user44109

我在数据库中为我的网站提供的每种语言都有一个单独的自定义表。我需要从POST请求发送的变量中动态选择正确的表。

首先,我尝试使用$wpdb->;准备好了,但我读到它不能真正处理表的名称,因为它会将其强制为字符串。

我看到的其他解决方案如下所示:

$foods = $wpdb->get_results("SELECT * FROM $sanitized_search_language WHERE dbID = $sanitized_search_text", ARRAY_A);
这将导致以下错误:

"<div id=\\"error\\"><p class=\\"wpdberror\\"><strong>WordPress database error:</strong> [You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near &#039;WHERE dbID = 719&#039; at line 1]<br /><code>SELECT * FROM  WHERE dbID = 719</code></p></div>[]"
在一些解决方案中,我还看到了用花括号括起来的变量,如:

$foods = $wpdb->get_results("SELECT * FROM {$sanitized_search_language} WHERE dbID = {$sanitized_search_text}", ARRAY_A);
但这也给了我一个错误。

如何根据动态变量选择要查询的自定义表?

1 个回复
SO网友:Buttered_Toast

我将从这个问题开始。

从sql错误输出中,我们可以看到SELECT * FROM WHERE dbID = 719

这告诉我们$sanitized_search_language 没有值,请先检查它。

现在来看这个查询的大问题!

您使用get_results 使用具有原样变量的sql查询,get_results 不会转义变量。

您必须使用prepare 将变量传递到sql查询中以防止sql注入时。

看见wpdb::get_results, 第一个用户贡献展示了如何实现这一点的一个很好的示例

相关推荐

$wpdb->删除对我无效

我有一个从外部数据库将数据同步到WP的功能(见下文)。这是一个计划项目的列表。更新计划时,应删除旧数据。请参阅此代码段:$wpdb->delete( $table, array( \'schedule_item_id\' => $item->id ) ) 但这并没有发生。例如,如果我有一个项目;“A”;计划在星期二下午6点,然后我将其从外部数据库中删除,并将其替换为iet