我在数据库中为我的网站提供的每种语言都有一个单独的自定义表。我需要从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 'WHERE dbID = 719' 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);
但这也给了我一个错误。
如何根据动态变量选择要查询的自定义表?
SO网友:Buttered_Toast
我将从这个问题开始。
从sql错误输出中,我们可以看到SELECT * FROM WHERE dbID = 719
这告诉我们$sanitized_search_language
没有值,请先检查它。
现在来看这个查询的大问题!
您使用get_results
使用具有原样变量的sql查询,get_results
不会转义变量。
您必须使用prepare
将变量传递到sql查询中以防止sql注入时。
看见wpdb::get_results, 第一个用户贡献展示了如何实现这一点的一个很好的示例