PHP数据库连接 - 选择数据库时出错

时间:2012-09-30 22:39:23

标签: php connection database-connection

尝试使用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>

4 个答案:

答案 0 :(得分:2)

$dbhandle中使用时,

SelectDatabase超出了范围。您可能希望Connection()返回$dbhandle。那样做,你可以这样做:

<?php SelectDatabase(Connection()) ?>

当然,您必须修改SelectDatabase以将连接变量作为参数。

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

答案 1 :(得分:2)

这是一个范围问题:$dbhandleConnection()

的本地问题

您可以使用全局变量(在两个函数的开头放置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 ....");