【问题标题】:php And Pdo include connection to other pages [duplicate]php和Pdo包括与其他页面的连接[重复]
【发布时间】: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 与通信输出。

标签: php mysql pdo xampp


【解决方案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);

【讨论】:

    猜你喜欢
    • 2015-03-10
    • 1970-01-01
    • 1970-01-01
    • 2011-03-20
    • 2011-07-22
    • 2016-10-14
    • 2014-11-12
    • 1970-01-01
    相关资源
    最近更新 更多