预处理语句返回一个空数组


prepared statement returns an empty array

我不能在我的预备语句中使用%s

echo $get_where; // returns: edited = 1
$get_uncontacted_members = $wpdb->get_results(
        $wpdb->prepare("SELECT * FROM yc_customers WHERE %s", $get_where)
);

此代码返回一个空数组。但是,当我使用$get_where而不是%s(见下面的代码)时,它将返回数据库中的所有结果。

// This works
echo $get_where; // returns: edited = 1
$get_uncontacted_members = $wpdb->get_results(
        $wpdb->prepare("SELECT * FROM yc_customers WHERE edited = 1", $get_where)
);

为什么不能用%s ?

WordPress虽然使用sprintf()语法,但它实际上像预处理语句一样工作。因此,您只能传递要查询的列的值,而不能传递整个列和值。

$get_uncontacted_members = $wpdb->get_results(
        $wpdb->prepare("SELECT * FROM yc_customers WHERE IFNULL(edited,'') = %s", 1)
);