在LAMP环境中,我在我协助的PHP课程中编写了一些代码,并且没有出现任何问题。课程结束后,我把我的代码带回家并在WAMPServer上运行,由于某种原因,mysql_connect不接受一些变量作为参数。我之所以知道这一点,是因为我尝试手动将参数提供给mysql_connect,并且连接正常。此外,我回显了所有四个变量,它们都打印正常。
我是PHP新手,但这对我来说没有任何意义。
代码:
functions.php
<?php
require ("config.php");
function conectardb () {
mysql_connect ($server, $login, $pass);
mysql_select_db ($db);
}
?>
config.php
<?php
$login = "root" ;
$pass = "" ;
$server = "localhost";
$db = "testing";
?>我尝试将普通参数逐个替换为它们的变量,并发现代码在这一点上是有效的:
function conectardb () {
mysql_connect ($server, "root", $pass);
mysql_select_db ("testing");
}如果我使用$login或$db,连接将无法工作。有什么想法吗?我都快疯了。
发布于 2011-02-06 04:09:55
这是对PHP中作用域的误解。
函数存在于它们自己的作用域中。您在与函数不同的作用域中定义了$login、$pass等。函数不能访问它们,也看不到它们。
你可以对此做几件事:
global关键字将它们从全局作用域拉入函数作用域即
$bar = 'hello world';
function foo() {
global $bar;
echo $bar;
}发布于 2011-02-06 04:09:59
您的问题是变量作用域。
与大多数语言不同,php不会自动知道在函数外部定义的变量。要访问这些变量,您需要将它们指定为函数中的global $server, $pass, $db;,或者使用$_GLOBALS[]变量。
请参阅:
$_GLOBALS (全局变量,它允许在functions)define()内可见)(对于全局常量,它将在函数内可见)发布于 2011-02-06 04:11:54
require ("config.php");
function conectardb ()
{
global $server, $login, $pass, $db;
mysql_connect ($server, $login, $pass);
mysql_select_db ($db);
}因为变量是在不同的作用域中定义的,所以这样做应该是可行的。但是,我建议传递需要值作为参数。
function conectardb ($server, $login, $pass, $db)
{
mysql_connect ($server, $login, $pass);
mysql_select_db ($db);
}https://stackoverflow.com/questions/4909350
复制相似问题