0

尝试使用 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");
}
    ?>

索引.php

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

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

4 回答 4

2

$dbhandle在 中使用时超出范围SelectDatabase。您可能想要Connection()return $dbhandle。这样,你可以这样做:

<?php SelectDatabase(Connection()) ?>

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

或者,您也可以创建$dbhandle一个全局变量,以便可以在脚本中的任何位置使用它。

于 2012-09-30T22:42:07.267 回答
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>
于 2012-09-30T22:42:58.063 回答
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改用。

于 2012-09-30T22:42:59.360 回答
0

你不会让你的生活更轻松:p

你只需要这样做:

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

如果您只想发出 sql 请求:

$connexion->query("SQL REQUEST ....");
于 2012-09-30T22:49:13.620 回答