【问题标题】:PHP database connection - error when selecting databasePHP数据库连接 - 选择数据库时出错
【发布时间】:2012-09-30 22:39:23
【问题描述】:

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

【问题讨论】:

  • 为什么还在使用过时的 API 以及为什么将数据库代码与 HTML 代码混合使用?
  • 最新的 API 是什么?
  • @Colin747 - PDO 或 mysqli。见php.net/manual/en/mysqlinfo.api.choosing.php
  • "$var" 是货物崇拜编程的标志。

标签: php connection database-connection


【解决方案1】:

$dbhandleSelectDatabase 中使用时超出范围。您可能希望Connection() 返回$dbhandle。这样,你可以这样做:

<?php SelectDatabase(Connection()) ?>

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

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

【讨论】:

    【解决方案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>
    

    【讨论】:

      【解决方案3】:

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

      请尝试以下方法:

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

      然后,当你调用函数时:

      SelectDatabase($dbhandle);
      

      确保 $dbhandle 是全局的。

      要么,或者正如其他人指出的那样,让Connection() 返回变量名,并在调用中使用它。

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

      【讨论】:

        【解决方案4】:

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

        你只需要这样做:

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

        如果你只想发出 sql 请求:

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

        【讨论】:

          猜你喜欢
          • 2012-05-15
          • 2019-01-12
          • 2017-10-20
          • 2011-10-10
          • 2014-05-05
          • 2015-07-02
          相关资源
          最近更新 更多