【问题标题】:Connect to database with PDO using a custom function使用自定义函数通过 PDO 连接到数据库
【发布时间】:2014-08-03 11:34:04
【问题描述】:

我有一个函数叫做: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() ;

此代码不起作用并给出以下错误:

注意:未定义的变量:连接

致命错误:在非对象上调用成员函数 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() ;

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

注意:未定义变量:服务器名

注意:未定义变量:db

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

注意:未定义变量:密码

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

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

【问题讨论】:

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


    【解决方案1】:

    您可以将 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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-12-27
      • 2013-01-26
      • 1970-01-01
      • 2015-12-09
      • 2011-01-10
      • 1970-01-01
      相关资源
      最近更新 更多