我在LAMP环境中辅助的PHP课程中使用了一些代码,并且没有遇到任何问题。课程结束后,我将我的代码带回家并在WAMPServer上运行,由于某种原因,mysql_connect不接受某些变量作为参数。我知道这是因为我尝试手工将参数提供给mysql_connect并且连接正常。此外,我回显了所有四个变量,并打印出OK。
我是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,连接将无法正常工作。有任何想法吗?这让我发疯了。
答案 0 :(得分:2)
这是对PHP范围的误解。
功能存在于自己的范围内。您在与函数不同的范围内定义了$login
,$pass
等。该功能无法访问它们,它无法看到它们。
你可以做一些事情:
global
关键字将它们从全局范围拉入功能范围即
$bar = 'hello world';
function foo() {
global $bar;
echo $bar;
}
答案 1 :(得分:2)
你的问题是可变范围。
与大多数语言不同,php不会自动了解在函数外定义的变量。要访问这些内容,您需要在函数中将其指定为global $server, $pass, $db;
,或使用$_GLOBALS[]
变量。
请参阅:
$_GLOBALS
(全局变量,允许在函数内可见)define()
(对于全局常量,在函数内具有可见性)答案 2 :(得分:2)
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);
}
答案 3 :(得分:0)
@DavidKuridža我建议不要使用mysql_组件并使用mysqli或PDO扩展,默认情况下包含这两个扩展名。