使用自定义函数使用PDO连接到数据库

时间:2014-08-03 11:34:05

标签: php pdo scope database-connection custom-function

我有一个名为table()的函数。

如果我已经在函数外部编写了PDO连接,我就无法通过PDO连接到数据库,如下所示:

include_once("server.inc");
$connect = new PDO('mysql:host='.$servername.'; dbname='.$db.';charset=utf8' , $username, $password); 
function table()
{
    $sql="select * FROM d1" ;
    $result = $connect->query($sql) ; 
    foreach ($result as $rows ) 
    {
        echo  $rows["Course_name"] . "<br/>" ;
    }
}
echo  table() ;

此代码不起作用并提供以下错误:

  

注意:未定义的变量:connect

     

致命错误:在非对象上调用成员函数query()

现在如果我使用这样的代码:

function table()
{
    include_once("server.inc");
    $connect = new PDO('mysql:host='.$servername.'; dbname='.$db.';charset=utf8' , $username, $password); 
    $sql="select * FROM d1" ;
    $result = $connect->query($sql) ; 
    foreach ($result as $rows ) 
    {
        echo  $rows["Course_name"] . "<br/>" ;
    }
}
echo  table() ;

一切都会好起来,但会发生另一个问题 - 我只能使用功能表()一次!如果我第二次使用它,则会发生此错误:

  

注意:未定义的变量:servername

     

注意:未定义的变量:db

     

注意:未定义的变量:用户名

     

注意:未定义的变量:密码

     

警告:为foreach()提供的参数无效

如何在不出错的情况下多次使用我的功能?

1 个答案:

答案 0 :(得分:0)

您可以将PDO实例注入函数:

include_once("server.inc");
$connect = new PDO('mysql:host='.$servername.'; dbname='.$db.';charset=utf8' , $username, $password); 

function table($connect)
{
    $sql="select * FROM d1" ;
    $result = $connect->query($sql) ; 
    foreach ($result as $rows ) 
    {
        echo  $rows["Course_name"] . "<br/>" ;
    }
}
//echo  table() ;
// Thanks barmar, missed the param before editing!
table($connect); // there's no need to echo the function as it does not return any value, 
                 // the function does the echoing

哦,你应该阅读scoping of variables,还有include vs. include_once