人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

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"; とかで。

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


●質問者: ty2016
●カテゴリ:コンピュータ インターネット
○ 状態 :終了
└ 回答数 : 2/2件

▽最新の回答へ

1 ● chii1873
●50ポイント

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


ty2016さんのコメント
無事解決致しました。この度はありがとうございます。

2 ● oil999
●50ポイント ベストアンサー

変数にはスコープというものがあり、関数外で定義された変数を関数内で利用するには 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);
}
?>

ty2016さんのコメント
無事解決致しました。この度はありがとうございます。
関連質問

●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ