【发布时间】:2017-02-04 07:28:07
【问题描述】:
我有一个配置文件,其中包含一个连接到我服务器上数据库的函数,这里是代码
配置文件
<?php
error_reporting(E_ALL);
ini_set('display_errors', 1);
define('USER', 'root');
define('PASS', '');
function communicate($dbname){
try {
$dbh = new PDO('mysql:host=serverip;dbname='.$dbname.'', USER, PASS);
$dbh->setAttribute(PDO::ATTR_EMULATE_PREPARES, false);
$dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
}
catch(PDOException $e) {
echo $e->getMessage();
$errorCode = $e->getCode();
}
}
?>
其他页面做一些事情
require('dbs/connfile.php');
if (isset($_GET['id'])) {
$accountname = 'dbname';
communicate($accountname);
$query = "SELECT * FROM datatbl";
$result= $dbh->prepare($query);
$result->execute();
while ($row = $result->fetch()) {
$cmail = $row['email'];
}
}
我得到了错误提示
注意:未定义变量:dbh in /home/moudlepath/page.php
那是因为$dbh 不是全球性的,我如何在包含在其中的任何页面中使用该连接文件?
【问题讨论】:
-
由于 $dbh 是在
communicate方法中创建的,因此它的作用域是该方法。最好的办法是让communicate返回 $dbh,然后设置 dbh 与通信输出。