嵌入式PDO在PHP中失去连接

时间:2019-02-18 23:42:24

标签: php pdo

我正在失去$ conn'注意:未定义的变量:..例程.php中的conn',我不知道为什么。 index.php调用session.php,后者会获取db.php和例程.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();   
        }
    ?>

2 个答案:

答案 0 :(得分: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 :(得分:1)

Alt 1

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

$conn

function sql_source($table, $name) { global $conn; $conn->setAttribute(...); ... } 行将全局变量添加到本地范围。

替代2

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

global