嵌入式pdo在php中丢失连接

问题描述 投票:-1回答:2

我失去了我的$ conn'注意:未定义的变量:conn in .. routines.php'我无法弄清楚为什么。 index.php调用session.php来获取db.php和routine.php但是routine.php不会接受$ conn,如下所示。我渴望学习,你能引导我朝着正确的方向前进吗?

的index.php

<?php require_once("session.php");?>

session.php文件

<?php session_start();
require_once("db.php");
require_once("routines.php");
$data=sql_source("table","name")
?>

routine.php

<?php
echo $status; THIS WORKS
function sql_source($table,$name){
    $sql="SELECT ".$name." FROM ".$table;
    $res=$conn->query($sql); **ERROR MESSAGE**:Notice: Undefined variable: conn in
    return $res;
}
?>

db.php中

<php?
    $initlocation="mysql:dbname=dbname;host=local";
    $username="user";
    $pwadat="pass";

    try{
         $conn = new PDO($initlocation, $username, $pwadat);
         $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
         echo "</br>Conncetion is established</br>"; / THIS WORKS.
         $status = $conn->getAttribute(PDO::ATTR_CONNECTION_STATUS);
        }
    catch(PDOException $e){
               echo "Connection failed: " . $e->getMessage();   
        }
    ?>
php pdo
2个回答
2
投票

你应该将$conn变量传递给sql_source函数:

function sql_source($table,$name,$conn){
    $sql="SELECT ".$name." FROM ".$table;
    $res=$conn->query($sql); **ERROR MESSAGE**:Notice: Undefined variable: conn in
    return $res;
}

然后调用此函数:

$data=sql_source("table","name", $conn);

你应该阅读更多关于变量范围的信息:Variable scope


1
投票

Alt 1

代码中的函数sql_source()没有局部变量$conn,在代码中变量是在全局级别定义的。 PHP默认情况下不会“拉入”全局变量,而是必须告诉它使用它

function sql_source($table, $name) {
    global $conn;
    $conn->setAttribute(...);
    ...
}

global行将全局变量添加到本地范围。

Alt 2

将变量作为参数发送到函数:

function sql_source($table, $name, $conn) {
    $conn->setAttribute(...);
    ...
}

sql_source("table", "name", $conn); // Calling the function
© www.soinside.com 2019 - 2024. All rights reserved.