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