PHPでdb接続を外部includeにしたらできなくなりました

(外部includeや関数化しないで普通に書けば動いてました。
includeや関数化したからできなくなったんです)

【a.php】←動かすphpファイル
<?php
include(dirname(__FILE__)."/include.php");
connect();
insert("あ");
?>
【include.php】←ホスト名やpassやconnect関数を書いたファイル
<?php
$hostname = "localhost";
$uname = "root";
$upass = "****";
$dbname = "database";
//ここから接続関数
function connect()
{
mysql_connect( $hostname, $uname, $upass);
mysql_select_db( $dbname);
mysql_set_charset("utf8");
}
//insertの処理の関数
function insert($word)
{
$sql="INSERT IGNORE INTO reverse (word) VALUES ('$word')";
mysql_query($sql);
}
?>

これで【a.php】をやっても
Notice: Undefined variable: hostname
Notice: Undefined variable: uname
Notice: Undefined variable: upass
Notice: Undefined variable: dbname とエラーで挿入されてません。

Undefinedとか言ってますが
ちゃんと【include.php】の中で定義してるじゃないですか。
$hostname = "localhost"; とかで。

ちょっとなぜ動かないかわからないのですが...
解決法をご教授頂けますか?

回答の条件
  • 1人5回まで
  • 登録:
  • 終了:2012/01/29 14:41:03
※ 有料アンケート・ポイント付き質問機能は2023年2月28日に終了しました。

ベストアンサー

id:oil999 No.2

回答回数1728ベストアンサー獲得回数320

ポイント50pt

変数にはスコープというものがあり、関数外で定義された変数を関数内で利用するには global 宣言してやる必要があります。

include.php を下のように書き換えてください。

<?php
$hostname = "localhost";
$uname = "root";
$upass = "****";
$dbname = "database";
//ここから接続関数
function connect()
{
    global $hostname, $uname, $upass, $dbname;

    mysql_connect( $hostname, $uname, $upass);
    mysql_select_db( $dbname);
    mysql_set_charset("utf8");
}

//insertの処理の関数
function insert($word)
{
    $sql="INSERT IGNORE INTO reverse (word) VALUES ('$word')";
    mysql_query($sql);
}
?>
id:ty2016

無事解決致しました。この度はありがとうございます。

2012/01/29 14:41:35

その他の回答1件)

id:chii1873 No.1

回答回数1ベストアンサー獲得回数0

ポイント50pt

関数の外で定義された変数を関数の内部で使うには、引数として変数で受けるか、グローバル変数を global $hostname; のように宣言する必要があります。http://php.net/manual/ja/language.variables.scope.php

id:ty2016

無事解決致しました。この度はありがとうございます。

2012/01/29 14:41:40
id:oil999 No.2

回答回数1728ベストアンサー獲得回数320ここでベストアンサー

ポイント50pt

変数にはスコープというものがあり、関数外で定義された変数を関数内で利用するには global 宣言してやる必要があります。

include.php を下のように書き換えてください。

<?php
$hostname = "localhost";
$uname = "root";
$upass = "****";
$dbname = "database";
//ここから接続関数
function connect()
{
    global $hostname, $uname, $upass, $dbname;

    mysql_connect( $hostname, $uname, $upass);
    mysql_select_db( $dbname);
    mysql_set_charset("utf8");
}

//insertの処理の関数
function insert($word)
{
    $sql="INSERT IGNORE INTO reverse (word) VALUES ('$word')";
    mysql_query($sql);
}
?>
id:ty2016

無事解決致しました。この度はありがとうございます。

2012/01/29 14:41:35

コメントはまだありません

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

回答リクエストを送信したユーザーはいません