尝试使用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>
答案 0 :(得分:2)
$dbhandle
中使用时, SelectDatabase
超出了范围。您可能希望Connection()
返回$dbhandle
。那样做,你可以这样做:
<?php SelectDatabase(Connection()) ?>
当然,您必须修改SelectDatabase
以将连接变量作为参数。
或者,您也可以将$dbhandle
设为全局变量,以便在脚本的任何位置使用它。
答案 1 :(得分: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>
答案 2 :(得分:0)
这里的问题很容易发现;你永远不会将$dbhandle
参数传递给你的函数。你需要这样做,所以函数可以使用参数;由于范围问题,并非所有参数都可立即用于所有功能。
请尝试以下方法:
function SelectDatabase($dbhandle) {
$name = "test";
$selected = mysql_select_db("$name",$dbhandle)
or die("Could not select $name");
}
然后,当你调用函数时:
SelectDatabase($dbhandle);
确保$ dbhandle是全局的。
或者正如其他人指出的那样,让Connection()
返回变量名称,并在调用中使用它。
其次,不推荐mysql_*
个函数。我建议你改用PDO
。
答案 3 :(得分:0)
你不会让你的生活更轻松:p
你必须这样做:
$connexion = new PDO("mysql:host=localhost;dbname=test","root","password");
如果你想只发出sql请求:
$connexion->query("SQL REQUEST ....");