mysql_connect和mysql_selectdb没有将一些变量作为参数的奇怪问题

时间:2011-02-05 20:07:37

标签: php mysql wamp

我在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,连接将无法正常工作。有任何想法吗?这让我发疯了。

4 个答案:

答案 0 :(得分:2)

这是对PHP范围的误解。

功能存在于自己的范围内。您在与函数不同的范围内定义了$login$pass等。该功能无法访问它们,它无法看到它们。

你可以做一些事情:

  1. 将数据库连接参数定义为常量而不是变量
  2. 定义函数内的变量(要求函数内部的配置文件具有相同的效果)
  3. 使用global关键字将它们从全局范围拉入功能范围
  4. $bar = 'hello world';
    function foo() {
        global $bar;
        echo $bar;
    }
    

答案 1 :(得分:2)

你的问题是可变范围。

与大多数语言不同,php不会自动了解在函数外定义的变量。要访问这些内容,您需要在函数中将其指定为global $server, $pass, $db;,或使用$_GLOBALS[]变量。

请参阅:

答案 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扩展,默认情况下包含这两个扩展名。