• 日常搜索
  • 百度一下
  • Google
  • 在线工具
  • 搜转载

如何在 WordPress 中编写自定义查询

使用自定义查询,您可以进行任何您想要的数据读取或操作。这开辟了一个充满新可能性的世界。

如何在 WordPress 中编写自定义查询  第1张

为什么使用自定义查询?

wordpress 中的基本功能在大多数情况下都很好,但是如果您有一些现有插件尚未解决的特定需求,您会怎么做?你在写自己的插件吗?然后你应该学习如何在 WordPress 中使用 sql 查询!官方参考资料可以在 WordPress Codex(自定义查询和WPDB 类)中找到。

wpdb班级_

wpdb全局 WordPress 类是使用自定义查询的关键。事实上,在执行查询时,几乎每个需要从数据库中获取数据的 WordPress api 最终都会在后台使用这个类。要使用这个类,您需要使用全局$wpdb变量,它是该类的实例化wpdb。

在本节中,我们将讨论wpdb该类的几个重要方法。使用这些方法,您可以在 WordPress 项目中执行所有类型的自定义查询。

query方法_

该query方法用于使用活动数据库连接执行查询。该query方法的第一个参数是有效的 SQL 语句。此方法的返回值是一个整数,对应于受影响/选择的行数或false发生错误时的行数。

通常,当您要检索记录计数时,您希望使用此方法。让我们看一下以下示例,以了解如何使用此方法。

global $wpdb;
$query = "SELECT COUNT(apple) FROM $wpdb->fruits";
$result = $wpdb->query($query);

首先,我们声明了$wpdb全局变量,以便我们可以使用wpdb该类。接下来,我们准备好 SQL 语句并将其作为query方法的第一个参数传递。该query方法将执行查询并返回选定或受影响的行数。

get_results方法_

该get_results方法返回整个查询结果,即一个数组。数组的每个元素对应于结果的一行。

让我们看看下面的例子。

global $wpdb;
 
$query = $wpdb->prepare( "SELECT *
    FROM $wpdb->wp_terms wt
    INNER JOIN
    $wpdb->wp_term_taxonomy wtt
    ON wt.term_id = wtt.term_id
    WHERE wtt.taxonomy =  %s AND wtt.count = %d", array( 'post_tag', 0 ) );
 
$results = $wpdb->get_results($query);
 
if (is_array($results) && count($results)) {
    foreach ($results as $row) {
        echo $row['name'];
    }
}

首先,我们使用该prepare方法准备 SQL 查询以安全执行。我们将在本文后面讨论更多关于准备好的语句。接下来,我们在get_results方法的第一个参数中传递了准备好的查询。最后,该get_results方法执行查询并将结果作为数组返回。

get_var方法_

该get_var方法用于从数据库中返回一个变量,并将查询的完整结果缓存起来以备后用。NULL如果没有结果,它会返回。

让我们仔细看看下面的例子来了解它是如何工作的。

global $wpdb;
 
$query = $wpdb->prepare( "SELECT wt.term_id, wt.name
    FROM $wpdb->wp_terms wt
    INNER JOIN
    $wpdb->wp_term_taxonomy wtt
    ON wt.term_id = wtt.term_id
    WHERE wtt.taxonomy =  %s AND wtt.count = %d
    ORDER BY wtt.count DESC", array( 'post_tag', 0 ) );
 
$results = $wpdb->get_var($query, 1, 0);

该get_var方法接受三个参数。

  • 查询:您要执行的 SQL 查询。

  • column:要从结果中检索的列名

  • row:要从结果集中检索的特定行的编号。

在上面的示例中,我们尝试检索name第一行中列的值。

get_row方法_

该get_row方法用于从数据库中检索单行。NULL当没有结果时,它会返回。

global $wpdb;
 
$query = $wpdb->prepare( "SELECT * FROM wp_posts WHERE post_type = %s", 'post' );
$row = $wpdb->get_row($query, ARRAY_A, 3);

该get_row方法接受三个参数。

  • 查询:您要执行的 SQL 查询。

  • 返回类型:OBJECT、ARRAY_A或中的一个ARRAY_N,对应于stdClass对象、关联数组或数值数组。

  • row:要从结果集中检索的特定行的编号

在上面的示例中,我们尝试从结果集中检索第四行。

get_col方法_

该get_col方法用于从结果集中检索特定列。如果结果集只包含一列,则将其返回。另一方面,如果结果集包含多个列,它将返回第二个参数中指定的特定列。

global $wpdb;
 
$query = $wpdb->prepare( "SELECT * FROM wp_posts WHERE post_type = %s", 'post' );
$col = $wpdb->get_col($query, 3);

在上面的示例中,我们尝试从结果集中检索第四列。

准备好的查询

根据 php.net 手册:

“它们 [prepared queries] 可以被认为是应用程序想要运行的 SQL 的一种编译模板,可以使用可变参数进行定制。”

预编译语句是预编译的 SQL 语句,只需将数据发送到服务器即可多次执行。它具有自动使占位符中使用的数据免受 SQL 注入攻击的额外优势。您可以通过在 SQL 中包含占位符来使用准备好的语句。

简而言之,查询必须在执行前进行 SQL 转义,以防止注入攻击。该类wpdb提供了prepare允许您准备 SQL 查询以安全执行的方法。在我们到目前为止讨论的示例中,我们已经prepare在执行 SQL 查询之前使用了该方法。

让我们快速看一下下面的示例,其中值10,monkey和apple将在查询中实际使用时被转义。

// Usage: $wpdb->prepare( 'query' [, value_parameter, value_parameter ... ] );
global $wpdb;
$wpdb->query( $wpdb->prepare(
    "INSERT INTO $wpdb->test_table (post_id, animal, food) VALUES ( %d, %s, %s )",
    array(
        10,
        'monkey',
        'apple'
    )
));

设置错误信息

show_errors您可以使用和hide_errors方法打开和关闭数据库错误消息。

global $wpdb;
$wpdb->show_errors();
$wpdb->hide_errors();

缓存控制

可以使用该flush方法刷新查询结果缓存。

global $wpdb;
$wpdb->flush();

插入数据

您可以使用该insert方法在 mysql 表中插入一行。

global $wpdb;$wpdb->insert(    
$wpdb->foods,    
array(        
'fruit' => 'apple',        
'year' => 2012    ),    
array(        
'%s',        
'%d'    
));
该insert方法接受三个参数。
  • 表:表的名称

  • data : 要插入的数据(列 => 值对)而不转义

  • format:要映射到$data. 如果您不传递任何内容,则所有值都将被视为字符串

更新数据

该update方法用于将行更新到 MySQL 表中。

global $wpdb;
$wpdb->update(
    $wpdb->foods,
    array(
        'fruit' => 'apple',  // string
        'year' =>  'value2'  // integer (number)
    ),
    array( 'ID' => 1 ),
    array(
        '%s',   // value1
        '%d'    // value2
    ),
    array( '%d' )
);

该update方法接受五个参数。

  • 表:表的名称。

  • 数据:要更新的数据(列值对)而不转义。

  • where: where条件,键值对数组的形式。

  • 格式:要映射到 中的每个值的格式数组$data。如果您不传递任何内容,则所有值都将被视为字符串。

  • 格式 其中:要映射到 中的每个值的格式数组$where。如果您不传递任何内容,则所有值都将被视为字符串。

栏目信息

该get_col_info方法用于从最后一个查询中检索列元数据

$wpdb->get_col_info('type', 1);

让我们看一下参数。

  • info_type:您要检索的元数据类型。您可以通过以下任何一项:'name', 'table', 'def', 'max_length', 'not_null', 'primary_key', 'multiple_key', 'unique_key', 'numeric', 'blob', 'type', 'unsigned', 或'zerofill'.

  • col_offset:指定从中检索信息的列。

引用 WordPress 表格

WordPress 数据库表可以在wpdb类中引用。这非常方便,因为表名可以与默认名称不同。以下是 WordPress 数据库表引用的列表:

  • $wpdb->posts;

  • $wpdb->postmeta;

  • $wpdb->comments;

  • $wpdb->commentmeta;

  • $wpdb->terms;

  • $wpdb->term_taxonomy;

  • $wpdb->term_relationships;

  • $wpdb->users;

  • $wpdb->usermeta;

  • $wpdb->links;

  • $wpdb->options;

请注意,我们不需要包含前缀,这是这里的好处,因为wpdb该类会为我们处理这些问题。

我们有它!WordPress 中自定义查询的参考,都在一个地方供您使用。

文章目录
  • 为什么使用自定义查询?
  • wpdb班级_
    • query方法_
    • get_results方法_
    • get_var方法_
    • get_row方法_
    • get_col方法_
  • 准备好的查询
  • 设置错误信息
  • 缓存控制
  • 插入数据
  • 更新数据
  • 栏目信息
  • 引用 WordPress 表格
  • 发表评论