Php 如何在Wordpress的主栏和侧栏中同时访问同一个MySQL数据库?

Php 如何在Wordpress的主栏和侧栏中同时访问同一个MySQL数据库?,php,mysql,pdo,wordpress,Php,Mysql,Pdo,Wordpress,我已经为我的Wordpress站点编写了一些基本的定制PHP代码。代码基本上访问MySQL数据库(与wordpress数据库不同的数据库)并显示信息。除了在主页上运行它,我还需要在侧边栏上运行它。代码在主页中运行良好,或者在侧边栏中运行良好,但当我将代码同时放在主页和侧边栏中时,侧边栏中出现以下错误: 致命错误:在/home/kimusubi/public_html/wp content/plugins/php code widget/execphp.php(44):eval()第5行代码中对非

我已经为我的Wordpress站点编写了一些基本的定制PHP代码。代码基本上访问MySQL数据库(与wordpress数据库不同的数据库)并显示信息。除了在主页上运行它,我还需要在侧边栏上运行它。代码在主页中运行良好,或者在侧边栏中运行良好,但当我将代码同时放在主页和侧边栏中时,侧边栏中出现以下错误:

致命错误:在/home/kimusubi/public_html/wp content/plugins/php code widget/execphp.php(44):eval()第5行代码中对非对象调用成员函数prepare()

我认为这是一个同时访问同一个表和数据库的问题,但我正在使用include_一次,并在完成后立即关闭连接,因此我不确定问题出在哪里。这是我用于侧边栏和主列页面的代码:

<?php
include_once 'db_config.php'; //Include database configuration file
$current_user = wp_get_current_user()->user_login; //Get current WP logged in user
try { //Access accounts table and pull user info into associative array
    $STH = $DBH->prepare("SELECT * FROM accounts WHERE accnt = :accnt");
    $STH->bindParam(':accnt', $current_user);
    $STH->execute();
    $Result = $STH->fetch(PDO::FETCH_ASSOC);
    $DBH = null;
    }
catch(PDOException $e) {  
    echo "Select Accounts Table Error: " .$e->getMessage(). "</br>"; //Display Error (if any)
}

$available = min($Result['week_two'],$Result['week_one'],$Result['current']);

echo "Account: " .$Result['accnt']. "</br>";
echo "Name: " .$Result['first']. " " .$Result['last']. "</br>";
echo "Address: " .$Result['address']. ", " .$Result['city']. ", " .$Result['state']. ", " .$Result['zip']. "</br>";
echo "Phone: " .$Result['phone']. "</br>";
echo "Current Balance: $" .$Result['current']. "</br>";
echo "Available Balance: $" .$available. "</br>";
?>

这是我的db_config.php文件中的内容:

<?php
try {
$DBH = new PDO("mysql:host=$host;dbname=$dbname", $user, $pass);
$DBH->setAttribute( PDO::ATTR_ERRMODE, PDO::ERRMODE_WARNING );

}
catch(PDOException $e) {  
    echo "Select DB Error: " .$e->getMessage(). "</br>";
}

?>


Exec PHP是我使用的唯一一个直接从Wordpress执行PHP的插件。非常感谢您的指导。

在代码中使用db连接对象之前,它看起来像是被销毁了。和include_once导致它不再初始化。不include_once检查它是否已初始化,如果未初始化,则再次包含它?另外,如果我使用“include”而不是“include_once”,这会保持多个活动连接吗?我试图非常小心我有多少活动连接,因为我的服务器上同时连接的数量有限。不,
include\u once
通常是正确的,但是如果include的结果超出范围,
\u once
会变得非常无效。不要直接从include返回PDO对象,而是让include定义一个函数,如果对象已经创建,则返回该对象,否则将构建一个新的函数。这被称为单例模式,在这些地区非常不受欢迎。。。但如果你不愿意,我不会告诉任何人!