PHP PDO - 在实例化PDO对象时使用常量变量undefined

时间:2015-12-31 05:44:48

标签: php mysql pdo

我使用 XAMPP 3.2.1在 Windows 7 上使用 PDO ,我遇到了问题,即使它可以正常工作我的共享托管服务器。

的settings.php

<?php
define('DB_NAME', 'testdb'); //DB Name
define('DB_HOST', 'localhost'); //DB host
define('DB_USER','root'); //DB user
define('DB_PASSWORD', ''); //DB users password
?>

db.php中

<?php

require_once("settings.php");

$db = new PDO('mysql:host='.DB_HOST.';dbname='.DB_NAME.';charset=utf8',      DB_USER, DB_PASSWORD);
$db->setAttribute(PDO::ATTR_EMULATE_PREPARES, false);

?>

output.php

<?php

require_once("db.php");

function outPutPosts(){
    return $db->query("select * from replies limit 35"); <-- this line
}

?>

它出现的错误:

  

注意:未定义的变量:db in   第10行的C:\ xampp \ htdocs \ schoolplatform \ output.php

     

致命错误:在null中调用成员函数query()   第10行的C:\ xampp \ htdocs \ schoolplatform \ output.php

非常感谢任何帮助:)

3 个答案:

答案 0 :(得分:1)

这个问题是因为$ db不能直接在函数内部使用。你可以使用global关键字在你的函数中访问它,如下所示:

link's name

答案 1 :(得分:0)

db.php内部

<?php

require_once("settings.php");

function getConnection() {
       global $db;
       $db = new PDO('mysql:host='.DB_HOST.';dbname='.DB_NAME.';charset=utf8',      DB_USER, DB_PASSWORD);
       $db->setAttribute(PDO::ATTR_EMULATE_PREPARES, false);
       return $db;
}
?>

然后输出.php

<?php

require_once("db.php");

function outPutPosts(){
    getConnection();

    return $db->query("select * from replies limit 35"); 
}

?>

答案 2 :(得分:0)

您需要在后面的函数中定义变量$db,如下所示:

 <?php

    require_once("db.php");

    function outPutPosts(){
        $db = getConnection(); // define the variable $db here

        return $db->query("select * from replies limit 35"); 
    }

?>