【问题标题】:$wpdb select prepare statement$wpdb 选择准备语句
【发布时间】:2017-10-23 06:41:58
【问题描述】:

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

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;
}

【问题讨论】:

  • 您的问题没有正确描述“出错”的含义......所以我只能猜测这可能是旅游名称周围缺少引号。 (并且根据该值的来源,它也可能缺少任何针对 SQL 注入的保护。)
  • 您告诉我们“出了什么问题”,我们会尽力告诉您如何解决。 ;-)
  • 你真的需要解释你正在尝试做什么,正在发生什么以及你想要发生什么。否则,这里的任何人都无法帮助您解决问题。
  • @CBroe 感谢您的回复。这段代码与我在 wordpress 主题中的自定义函数文件中的其他 PHP 代码一起使用。但它没有结果。当我在网上搜索最安全的 SQL 语句时,我发现prepare 语句就是其中之一。你会为此提出一个更好的解决方案吗?
  • 嗯,它很可能没有给出结果,因为查询有问题。 // 如何使用prepared statements,可以参考文档中的示例:codex.wordpress.org/Class_Reference/wpdb

标签: php mysql wordpress


【解决方案1】:

使用WP_Query类从数据库中检索数据,大多数时候比手动编写完整查询更方便,更不用说它使用准备好的语句并正确转义数据。

$query = new WP_Query([ 
  'post_type' => 'product',
  'title' => $tour_name
]);

要仅获取 id-s,请使用 wp_list_pluck:

$post_ids = wp_list_pluck( $query->posts, 'ID' );

【讨论】:

    猜你喜欢
    • 2018-10-21
    • 2017-05-23
    • 1970-01-01
    • 2013-08-25
    • 2015-02-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多