php和Pdo包括与其他页面的连接[重复]
Posted
技术标签:
【中文标题】php和Pdo包括与其他页面的连接[重复]【英文标题】:php And Pdo include connection to other pages [duplicate] 【发布时间】: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 与通信输出。
【参考方案1】:
简单的解决方案是:
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();
return $dbh; // see this? return your $dbh
及用法:
$dbh = communicate($accountname);
【讨论】:
以上是关于php和Pdo包括与其他页面的连接[重复]的主要内容,如果未能解决你的问题,请参考以下文章
PHP - PDO OOP MySQL 数据库连接被重复,这是正常行为吗? [复制]