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包括与其他页面的连接[重复]的主要内容,如果未能解决你的问题,请参考以下文章

PDO 连接与连接管理

php? PDO 或 mySQLi [重复]

PHP - PDO OOP MySQL 数据库连接被重复,这是正常行为吗? [复制]

使用 XAMPP 和 Workbench 的带有 PDO 的 PHP [重复]

如何在不同文件中使用 PDO 连接对象[重复]

PHP & PDO - 有啥方法可以建立“安全”的持久连接吗?