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 に答える