【问题标题】:wordpress include a second mysql connectionwordpress 包含第二个 mysql 连接
【发布时间】:2015-03-25 20:57:32
【问题描述】:

我有一个包含一些页面的网站,现在添加我在子目录中安装了 wordpress 的其他页面。

我为 wordpress 创建了一个儿童主题。在我的子主题的 header.php 中,我包含了 home.css 和我的主要网站的标题标记。没事!

因为我的 主网站 已经连接到一个 mysql 数据库(不是 wp 数据库),我想在我的子主题的 header.php 中添加一个这个 mysql 连接。

所以我首先在我的子主题的 header.php 中添加了这段代码:

function example( $value ) {
global $con;
return mysqli_real_escape_string( $con, trim( $value ) );
}

$con = mysqli_connect( HOST, USER, PASS, DB ) or die( 'Error' );

$test = example( 'my string' );

虽然完全相同的代码在我的主网站上工作,但在 wordpress 中我收到此错误:

Warning: mysqli_real_escape_string() expects parameter 1 to be mysqli, null given in /home/user/public_html/wordpress/wp-content/themes/afs/header.php on line 11

PS:我认为问题出在 global $con,因为如果我将 $con 作为函数参数传递,一切正常。

可以在我的 wordpress 子主题中添加第二个 mysql 连接 unsing global $con 还是应该更改我所有的 php 函数?我很想知道为什么会发生这种情况..

【问题讨论】:

    标签: php mysql wordpress themes


    【解决方案1】:

    是的,可以在 WordPress 中使用多个数据库。我认为最简单的方法是使用 WordPress db 类的新实例并让它负责引用正确的连接。

    $my_second_db = new wpdb( $db_user, $db_pass, $db_name, $db_host );
    

    您当然可以将其设为全局,然后在您的 separata 数据库上使用 WordPress db 函数。

    $my_second_db->query( $my_second_db->prepare("SELECT * FROM table WHERE ID = %d", $id), ARRAY_A );
    

    或者在你的情况下:

    $my_second_db->escape( $value );
    

    但是您的代码也可以工作,只是您必须在分配数据库资源之前将 $con 声明为全局。但是,您将无法使用所有整洁的 WordPress 功能,当您花费大量精力加载它们时,这似乎是一种浪费。无论哪种方式,这都应该有效:

    function example( $value ) {
    global $con;
    return mysqli_real_escape_string( $con, trim( $value ) );
    }
    
    global $con;
    $con = mysqli_connect( HOST, USER, PASS, DB ) or die( 'Error' );
    
    $test = example( 'my string' );
    

    【讨论】:

    • 谢谢,将 $con 设置为全局是一种不好的做法?
    • 一点也不,只是在使用 WordPress 框架时,我个人会选择使用他们的数据库类,因为它具有大量漂亮的功能。 codex.wordpress.org/Class_Reference/wpdb
    猜你喜欢
    • 2021-03-09
    • 2012-08-23
    • 1970-01-01
    • 2019-01-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多