我有一个包含某些页面的网站,现在要添加其他已安装wordpress的页面。
我为wordpress创建了一个CHILD THEME。在我的孩子主题的header.php中,我已经包含了home.css和我主网站的标题标记。一切都好!
因为我的主网站已经连接到mysql数据库(而不是wp),我想在我的子主题的header.php中添加这个mysql连接。 / p>
所以我在我孩子主题的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:我认为问题在于全局$ con ,因为如果我将 $ con作为函数参数传递,一切正常。
可以在我的wordpress子主题中添加第二个mysql连接unsing global $ con ,还是应该更改我的所有php函数?我很想知道为什么会发生这种情况。
答案 0 :(得分:1)
是的,可以在WordPress中使用几个db。最简单的我认为是使用WordPress数据库类的新实例,并让它负责引用正确的连接。
$my_second_db = new wpdb( $db_user, $db_pass, $db_name, $db_host );
您可以将其设为全局,然后在您的separata数据库中使用WordPress数据库功能。
$my_second_db->query( $my_second_db->prepare("SELECT * FROM table WHERE ID = %d", $id), ARRAY_A );
或者在你的情况下:
$my_second_db->escape( $value );
但是你的代码也可以正常工作,你必须在分配db资源之前将$ 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' );