Mysql $wpdb select prepare语句

Mysql $wpdb select prepare语句,mysql,wordpress,mysqli,Mysql,Wordpress,Mysqli,我被困在解决一个严重的问题上,这个问题花费了太多的时间。我知道这可能是一件小事,但我花了太多时间只创建了一个简单的select查询。下面是我用来查看并告诉我出了什么问题的代码 global $wpdb; $querystr = " SELECT $wpdb->posts.ID FROM $wpdb->posts WHERE $wpdb->posts.post_type = 'product' AND $wpdb->posts.po

我被困在解决一个严重的问题上,这个问题花费了太多的时间。我知道这可能是一件小事,但我花了太多时间只创建了一个简单的select查询。下面是我用来查看并告诉我出了什么问题的代码

global $wpdb;
    $querystr = "
    SELECT $wpdb->posts.ID 
    FROM $wpdb->posts
    WHERE $wpdb->posts.post_type = 'product'
    AND $wpdb->posts.post_title = $tour_name
";

$productids = $wpdb->get_results($querystr, OBJECT);

foreach ($productids as $productid) {
echo $productid;
}
使用类从数据库检索数据,大多数情况下,它比手动编写完整查询更方便,更不用说它使用准备好的语句并正确地转义数据

$query = new WP_Query([ 
  'post_type' => 'product',
  'title' => $tour_name
]);
要仅获取id-s,请使用:


你的问题没有正确描述“出错”的含义。。。所以我只能猜测,这可能是旅行团名称周围缺少的引号。根据该值的来源,它可能也缺少任何针对SQL注入的保护。您可以告诉我们出了什么问题,我们将尝试告诉您如何修复它-你真的需要解释你正在尝试做什么,正在发生什么以及你想要发生什么。否则,这里的任何人都不可能帮助您解决问题。@CBroe感谢您的回复。这段代码与我的自定义函数文件中的其他PHP代码一起在wordpress主题中使用。但结果却毫无结果。当我在线搜索最安全的SQL语句时,我发现prepare语句就是其中之一。你能为这个问题提出一个更好的解决方案吗?它很可能不会给出结果,因为查询是错误的如何使用准备好的语句,可以在文档中的示例中找到:
$post_ids = wp_list_pluck( $query->posts, 'ID' );