连接到不同的数据库

时间:2019-03-05 作者:Jesse Orange

在我的站点中,我希望从另一个表中提取数据,而不必从另一个站点创建API。我已经看到你可以这样做:

$wpdbtest_otherdb = new wpdb(\'myaccount_cityuser\', \'mypassword\', \'myaccount_cities\', \'localhost\');
$wpdbtest_otherdb->show_errors();
$mycities = $wpdbtest_otherdb->get_results("SELECT name
                                            FROM city
                                            WHERE city.stadium = 1");
foreach ($mycities as $mycity) {
    echo $mycity->name . \'<br />\';
}
然而,我不喜欢把所有东西都放在一个楔子里,包括数据库凭据。

What I\'ve tried:

已将凭据添加到wp-config.php

define(\'DB_CAREERS_NAME\', \'careers\');
define(\'DB_CAREERS_USER\', \'root\');
define(\'DB_CAREERS_PASSWORD\', \'\');
define(\'DB_CAREERS_HOST\', \'localhost\');
define(\'DB_CAREERS_CHARSET\', \'utf8mb4\');
define(\'DB_CAREERS_COLLATE\', \'\');
将函数添加到functions.php

function get_job_listings()
{
    // Create new wpdb instance
    $connection = new wpdb(DB_CAREERS_USER, DB_CAREERS_PASSWORD, DB_CAREERS_NAME, DB_CAREERS_HOST);

    // Assign a table prefix
    $connection->set_prefix(\'\');

    // Status of jobs to show
    $status = "Open";

    // Perform query
    $query = $connection->prepare(
        "SELECT j.*
        FROM $connection->job_posts j
        WHERE j.status = \'%s\'
        ORDER BY j.created_at DESC",
        $status
    );

    $jobs = $connection->get_results($query);

    return $jobs;
}
但是我想使用我的辅助数据库连接,就像使用标准的WordPress查询一样,以便所有查询生成器功能都可用。

1 个回复
SO网友:Jacob Peattie

但是我想使用我的辅助数据库连接,就像使用标准的WordPress查询一样,以便所有查询生成器功能都可用。

除非另一个数据库是具有完全相同的表结构的WordPress数据库,否则您不能。

WordPress中的查询生成器函数仅为处理WordPress的表而设计和构建。它们的内部逻辑都取决于它们查询的表的特定数据库结构。WP_Query, 例如,仅设计用于查询wp_posts 表,它还取决于设计用于wp_postmeta 桌子wp_term_relationships 表等。

因此,这些类和函数不仅不能与您的自定义表一起使用,而且也没有任何用处,因为它们与这些表的耦合非常紧密。如果您的数据不是post meta或没有post状态,那么能够基于post meta或post状态进行查询是没有用的。

在处理自定义表时,您需要构建任何函数或类来自己查询它们。如果数据库是MySQL,那么wpdb() 实例将允许您访问帮助器方法,如prepare(), insert(), get_results() 等等,但这是WordPress将给你的最大帮助。

相关推荐

将本地jQuery替换为外部托管时出现WordPress错误

我试图从CDN加载jquery,而不是用wordpress本机加载。在我的功能中。php我已经完成了如下操作,确保它只发生在前端:function replace_jquery() { if (!is_admin()) { wp_deregister_script(\'jquery\'); wp_register_script(\'jquery2\', \'https://ajax.googleapis.com/ajax/libs/jquer