Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/62.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 如何从不同的文件访问函数中的变量?_Php_Mysql_Pdo - Fatal编程技术网

Php 如何从不同的文件访问函数中的变量?

Php 如何从不同的文件访问函数中的变量?,php,mysql,pdo,Php,Mysql,Pdo,我有两个文件,一个是functions.php,其中包含连接到数据库的PDO对象,并包含作为变量的列,另一个是index.php,用于输出包含数据的变量。数据库连接可以工作,但是当我尝试从函数中回显变量时,返回的变量未定义,我做错了什么 functions.php <? php function connectDB() { $hostname = 'xxxxxxxx'; $db = 'xxxxxxx'; $user = 'xxxxxxxx'; $pass

我有两个文件,一个是functions.php,其中包含连接到数据库的PDO对象,并包含作为变量的列,另一个是index.php,用于输出包含数据的变量。数据库连接可以工作,但是当我尝试从函数中回显变量时,返回的变量未定义,我做错了什么

functions.php

<? php 

function connectDB() {
    $hostname = 'xxxxxxxx';
    $db = 'xxxxxxx';
    $user = 'xxxxxxxx';
    $pass = 'xxxxxxx';

    $dbh = new PDO("mysql:host=$hostname; dbname=$db; charset=utf8", $user, $pass, array(PDO::ATTR_EMULATE_PREPARES => false, PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION)); 

    $sql = "//my query";

    $query = $dbh->prepare($sql);
    $query->execute(array('//value','//value'));            
    $query->setFetchMode(PDO::FETCH_ASSOC);

    while ($r = $query->fetch()):

        $var1 = $r['column1']; 
        $var2 = $r['column2'];
        $var3 = $r['column3'];
        $var4 = $r['column4'];
        $var5 = $r['column5'];

    endwhile;                                                       

}

?>

index.php

<?php
include 'functions.php';

?>

<?php 

try {

connectDB();
echo 'You are connected to Database';
echo $var1;
$dbh = null; 

    }
catch(PDOException $e) { 
        echo $e -> getMessage(); 
    }

?>

您通常可以通过两种方式之一访问变量,一种是作为传递给函数的参数,另一种是在函数中声明变量为全局变量。希望以下内容对您有所帮助

function banana( $externalvar=false ){
   echo $externalvar;
}

or

function banana(){
    global $externalvar;

    echo $externalvar;
}

默认情况下,这些变量是connectDB()函数的本地变量,因此您必须事先在全局范围内声明它们,或者使用$GLOBALS设置它们:

方法1

<? php 

    $var1 = ''; 
    $var2 = '';
    $var3 = '';
    $var4 = '';
    $var5 = '';

function connectDB() {
    $hostname = 'xxxxxxxx';
    $db = 'xxxxxxx';
    $user = 'xxxxxxxx';
    $pass = 'xxxxxxx';

    $dbh = new PDO("mysql:host=$hostname; dbname=$db; charset=utf8", $user, $pass, array(PDO::ATTR_EMULATE_PREPARES => false, PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION)); 

    $sql = "//my query";

    $query = $dbh->prepare($sql);
    $query->execute(array('//value','//value'));            
    $query->setFetchMode(PDO::FETCH_ASSOC);

    while ($r = $query->fetch()):

        $var1 = $r['column1']; 
        $var2 = $r['column2'];
        $var3 = $r['column3'];
        $var4 = $r['column4'];
        $var5 = $r['column5'];

    endwhile;                                                       

}

?>

方法2

<? php 

function connectDB() {
    $hostname = 'xxxxxxxx';
    $db = 'xxxxxxx';
    $user = 'xxxxxxxx';
    $pass = 'xxxxxxx';

    $dbh = new PDO("mysql:host=$hostname; dbname=$db; charset=utf8", $user, $pass, array(PDO::ATTR_EMULATE_PREPARES => false, PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION)); 

    $sql = "//my query";

    $query = $dbh->prepare($sql);
    $query->execute(array('//value','//value'));            
    $query->setFetchMode(PDO::FETCH_ASSOC);

    while ($r = $query->fetch()):

        $GLOBALS['var1'] = $r['column1']; 
        $GLOBALS['var2'] = $r['column2'];
        $GLOBALS['var3'] = $r['column3'];
        $GLOBALS['var4'] = $r['column4'];
        $GLOBALS['var5'] = $r['column5'];

    endwhile;                                                       

}

?>


真诚地说,您的复制粘贴服务:)

智能代码应该使用:

function connectDB() {
    // ...
    $output = [];
    $index  = 0;
    while ($r = $query->fetch()):
        yield $r;
    endwhile; 
}
function connectDB() {
    // ...
    $output = [];
    $index  = 0;
    while ($r = $query->fetch()):
        ++$index;
        foreach($r as $key => $value) {
            $output[$name . '_' . $index] = $value;
        }
    endwhile; 
    return $output; 
}
然后:

否则,只需返回一个数组,然后:

function connectDB() {
    // ...
    $output = [];
    $index  = 0;
    while ($r = $query->fetch()):
        yield $r;
    endwhile; 
}
function connectDB() {
    // ...
    $output = [];
    $index  = 0;
    while ($r = $query->fetch()):
        ++$index;
        foreach($r as $key => $value) {
            $output[$name . '_' . $index] = $value;
        }
    endwhile; 
    return $output; 
}
然后:


第二个目的非常丑陋

您必须阅读PHP文档。函数中定义的变量在数组中不可见(返回数组中的值:)@Matt write answer I set plus:)好的,使用
fetchAll()
代替
fetch()
;)