2012-09-30 58 views
0

我在尝试使用PHP连接到数据库时遇到问题。我收到以下错误PHP数据库连接 - 选择数据库时出错

Notice: Undefined variable: dbhandle in /opt/lampp/htdocs/connection/Connection.php on line 17 

Warning: mysql_select_db() expects parameter 2 to be resource, null given in /opt/lampp/htdocs/connection/Connection.php on line 17 
Could not select test 

我的连接文件:

<?php 

    function Connection() { 
    $username = "root"; 
    $password = ""; 
    $hostname = "localhost"; 

    $dbhandle = mysql_connect($hostname, $username, $password) 
    or die("Unable to connect to MySQL"); 
    echo "Connected to MySQL<br>"; 

    mysql_query("SET NAMES utf8"); 
    } 

    function SelectDatabase() { 
    $name = "test"; 
    $selected = mysql_select_db("$name",$dbhandle) 
    or die("Could not select $name"); 
} 
    ?> 

的index.php

<html> 
<head> 
<?php include 'Connection.php'; ?> 

</head> 
<body> 
<?php Connection() ?> 
<?php SelectDatabase() ?> 
</body> 
</html> 
+1

为什么你仍然在使用outdate API,为什么要将数据库代码与HTML代码混合? – ThiefMaster

+0

什么是最新的API? – Colin747

+1

@ Colin747 - PDO或mysqli。请参阅http://www.php。net/manual/en/mysqlinfo.api.choosing.php – j08691

回答

2

$dbhandle超出范围,SelectDatabase使用时。您可能需要Connection()返回$dbhandle。这样一来,你可以这样做:

<?php SelectDatabase(Connection()) ?> 

当然,你将不得不修改SelectDatabase采取连接变量作为参数。

或者,您也可以使$dbhandle为全局变量,以便您可以在脚本中的任意位置使用它。

2

这是一个范围问题:$dbhandle是本地Connection()

您可以使用全局变量(把global $dbhandle;在这两者的功能开始),这是不是很优雅,或

function Connection() { 
    $username = "root"; 
    $password = ""; 
    $hostname = "localhost"; 

    $dbhandle = mysql_connect($hostname, $username, $password) 
    or die("Unable to connect to MySQL"); 
    echo "Connected to MySQL<br>"; 

    mysql_query("SET NAMES utf8"); 

    return $dbhandle; 
} 

function SelectDatabase($dbhandle) { 
    $name = "test"; 
    $selected = mysql_select_db("$name",$dbhandle) 
    or die("Could not select $name"); 
} 

</head> 
<body> 
<?php $db=Connection() ?> 
<?php SelectDatabase($db) ?> 
</body> 
</html> 
0

这里的问题很容易发现;您绝不会将$dbhandle参数传递给您的函数。您需要这样做,以便函数可以使用该参数;由于范围问题,并非所有参数都立即可用于所有功能。

尝试,而不是执行以下操作:

function SelectDatabase($dbhandle) { 
    $name = "test"; 
    $selected = mysql_select_db("$name",$dbhandle) 
     or die("Could not select $name"); 
} 

然后,当你调用该函数:

SelectDatabase($dbhandle); 

确保$数据库句柄是全球性的。

无论是或其他人指出的,Connection()都会返回变量名称,并在调用中使用它。

其次,mysql_*函数已被弃用。我建议你改用PDO

0

你不要让你的生活更轻松:P

你就必须做到这一点:

$connexion = new PDO("mysql:host=localhost;dbname=test","root","password"); 

,如果你想使刚刚SQL请求:

$connexion->query("SQL REQUEST ....");