与直接使用$wpdb->Query()相比,$wpdb->Prepare()、Then$wpdb->Query()可以降低整个页面的加载速度

时间:2019-02-04 作者:KestutisIT

让我们假设$wpdb->query() 可根据需要正确逃逸,因此无需使用$wpdb->prepare(). 然而,Envato(而非w.org)的一些新要求要求首先检查准备功能,我认为这有4个缺点:

如果我们有10个以上的变量,那么很难读取查询文本。

如果我们说插件上有500个查询,那么会降低网站负载。

  • 不太适合动态查询参数,即可能有或没有国家、城市、州、邮政编码、街道地址、公寓号码的地理位置搜索。我们不能为每个场景使用prepare,因为它在代码方面会变得太大。

    无需双重验证。特别是如果给定的验证已经通过[A-Z-\\u 0-9]regexp进行了验证,而\'%1!\'验证更具全局性,可以允许将我们不允许的内容保存到DB$wpdb->prepare(), 然后$wpdb->query() VS直线$wpdb->query(), 可以减缓整个页面的加载时间,我应该注意这一点。

  • 1 个回复
    SO网友:Krzysiek Dróżdż

    $wpdb->prepare 不应该有任何重大区别。正如你在这里看到的(https://developer.wordpress.org/reference/classes/wpdb/prepare/#source), 这没什么用。它只负责正确的转义和格式化变量,因此可以安全地运行最终查询。

    所以如果你问$wpdb->query( $wpdb->prepare( ... ) )$wpdb->query( <SAFE_SQL> ), 那么没有-没有这样的区别,因为您必须准备<SAFE_SQL> 您可以自己查询,这样您就可以prepare 作用

    至于你的观点:

    我真的不认为它更难读。对我来说,这更容易,因为我清楚地看到什么类型的变量进入查询,以及在那里传递什么值。当然,格式化、命名等对于使代码可读性非常重要。

    否,正在运行prepare 不应该有明显的区别。但是如果您有500个查询,那么您应该看看它们,因为它确实有很多查询。

    为什么它不适合动态查询?WP中有很多动态查询,它们都是用prepare 方法看看吧WP_Query::get_posts 方法-它在WP中几乎到处都被调用,并基于许多参数和附加过滤器构造高度动态的查询。。。

    是的,有。验证是一回事。逃跑是另一回事。卫生处理是另一个问题。这些步骤中的每一步对您的现场安全都很重要。

    相关推荐

    WP_QUERY按年、月查找帖子

    我需要在分类法归档页面中按自定义帖子类型的年和月创建排序。像这样:这里显示的是年份,如果该年存在post。如果当月存在帖子,则突出显示月份。如何找出哪年哪月有帖子?如果每年每个月都有一个帖子,那么创建一个循环来检查,这将是“不好的”。有什么解决方案吗?P、 S.cpt名称-document_base 和分类名称-document_base_categories 和字段中存储的日期docs_pubdate (自定义field suite插件)