1

我有一个名为: 的函数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() ;

一切都会好起来的,但是会发生另一个问题——我只能使用函数 table() 一次!如果我第二次使用它,就会发生这个错误:

注意:未定义变量:servername

注意:未定义变量:db

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

注意:未定义变量:密码

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

我应该怎么做才能多次使用我的功能而没有错误?

4

1 回答 1

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

哦,您应该阅读variables 的范围,以及include 与 include_once

于 2014-08-03T11:38:58.167 回答