Can't run database query

时间:2016-05-10 作者:Badger

我正在编写一个函数,从数据库中的自定义表中查询一些信息。似乎我无法查询所需领域的数据库。

function ch_details_from_id($id) {

    global $wpdb;

    $details = $wpdb->get_results("SELECT * FROM " . $wpdb->prefix . "ch_guests WHERE key = \'" . $id . "\'", ARRAY_A);

    return $details;
}
$id当前为“001”。如果搜索表中的任何其他字段,我会得到预期的结果,但在该字段上不会返回任何结果。

如果我在phpMyAdmin中运行完全相同的查询,它就可以正常工作。

3 个回复
最合适的回答,由SO网友:Arpita Hunka 整理而成

这里是列名的问题。您正在使用列key 在查询中,它是mysql中的默认关键字/索引。

要解决此类问题,只需在查询中使用“Grave accent(`)”符号作为列名,无需更改列名

$details = $wpdb->get_results("SELECT * FROM " . $wpdb->prefix . "ch_guests WHERE `key` = \'" . $id . "\'", ARRAY_A);
运行上面的查询,这对我有用,所以我相信也会对你有用。

SO网友:fischi

您应该使用$wpdb->prepare 对于查询,就像它为您进行所有清理和转义一样。而且key 在MySQL中保留为字段名:

function ch_details_from_id($id) {

    global $wpdb;
    // or try using " . $wpdb->prefix . "ch_guests
    $query = "SELECT * FROM $wpdb->ch_guests WHERE guest = %d";
    $details = $wpdb->get_results( $wpdb->prepare( $query, $id ) );

    return $details;

}
要进行调试,可以输出最后一个查询$wpdb 已完成。

SO网友:Badger

字段名称是保留名称。更改自keyid 解决了问题。

相关推荐

$wpdb->GET_RESULTS()足够安全吗

原始问题如果我使用get\\u results()函数,这对mysql注入攻击足够安全吗?global $wpdb; $wpdb->get_results("select * from tableA where B = C"); 还是应该先做些准备?最佳做法是什么?在2021 12月的今天,我们应该如何做到这一点?更新,所以我应该用这个来代替?global $wpdb; $my_variable = "sometext"; $p