PHPとMySQLについて質問です。


MySQLのDB接続設定(mysql_connectとmysql_select_dbの内容)を、config.phpにまとめて記述しています。

この中にサイトURL($site_url="http://localhost")も記述されているとします。

そこで質問ですが、関数内でconfig.phpを使う場合、どのようにされていますでしょうか?

■ファイル名(sidenavi.php)
function sideNavi(){
$sql="select * from datalist";
$res=mysql_query($sql,$conn);
while($row=mysql_fetch_array($res)){
echo "<a href=\"{$site_url}\">$row["name"]."</a><br/>";
}
}

このようなソースが合った場合を仮定します。

ファイル構造は
/config.php
/include/sidenavi.php

となっていると仮定します。(※ただし、構造が変わる可能性もあり)

上記のような単純なコードの場合は、classを使用してconfig.php内のDB接続情報をfunction内に送っていますが、今回はclassを使用しない方法でお願いします。

より良い回答をいただけた方には多くのポイントを差し上げます。

回答の条件
  • URL必須
  • 1人2回まで
  • 登録:2007/03/08 11:47:27
  • 終了:2007/03/13 11:05:06

回答(2件)

id:nandedarou No.1

nandedarou回答回数230ベストアンサー獲得回数342007/03/08 14:26:47

ポイント50pt
require("config.php");

//ここで、$connにDBを接続するコードを書く
//接続の為のコードは省略します。

sideNavi($conn,$site_url);

function sideNavi($conn,$site_url){
  //省略
}

でいいと思います。

$connについては、これでいいと思いますが、

関数内で使う設定情報が$site_urlだけでなく、他にも多くある場合、引数の数が多くなることになります。

そこで、私は、設定ファイルをINIファイル形式で書き、関数の外で

$Conf = parse_ini_file( '設定ファイル名', true );

として設定情報を配列として$Confに格納し、$Confを引数として関数に渡します。関数内では、$Conf['site_url']で情報を引き出します。

sideNavi( $conn, $Conf );

function sideNavi($conn,$Conf ){
  //省略
  echo "<a href=\"{$Conf['site_url']}\">$row["name"]."</a><br/>";
  //省略
}

http://au.php.net/manual/ja/function.parse-ini-file.php

id:kt26

ありがとうございます。parse_ini_fileを使うのは全く想定していませんでした。

参考にさせていただきます。

2007/03/10 16:14:44
id:tobeoscontinue No.2

tobeoscontinue回答回数214ベストアンサー獲得回数542007/03/10 13:41:26

ポイント50pt

http://jp.php.net/manual/ja/function.require-once.php

require_onceを使っていますが、相対パスで使う場合、最初にアクセスされるphpファイルの位置によって変わってくるのがやっかいです。かといって絶対パスでは長くなりますし、後で構造が変わった場合は面倒です。

ファイルへのパスを下記とします

/h/o/g/e/config.php
/h/o/g/e/include/sidenavi.php

この場合

define('HOGE_ROOT', '/h/o/g/e');a
ini_set('include_path', HOGE_ROOT.':'.ini_get('include_path'));

とinclude_pathに設定することでphpに探させるようにして、相対パスでアクセスするようにしています

位置が変わる程度であればHOGE_ROOTを変えることだけで済みます。

require_once 'config.php'
require_once 'include/sidenavi.php'

ただdefineとini_set()を毎回書くのは面倒なのでinit.phpとしています。

require_once '../init.php'

require_once 'config.php'
require_once 'include/sidenavi.php'

init.phpの時点ではまだinclude_pathは設定されていないのでそのphpスクリプトファイルの位置からinit.phpまでのパスを正しく設定しなければなりませんが以降は有効です。


MySQLのDB接続設定を、config.phpにまとめて記述しているのであればDBへの操作もconfig.phpへ記述したほうがいいと思うのですが(class的な考えなのでダメか)

function sideNavi(){
  $sql="select * from datalist";
  $res=mysql_query($sql,$conn);
  $data = array();
  while($row=mysql_fetch_array($res))
    $data[] = $row["name"];
  return array($site_url, $data);
}
require_once '../init.php'
require_once 'config.php'

list($site_url, $data) = sideNavi()
foreach ($data as $name) {
  echo "<a href=\"{$site_url}\">{$name}"</a><br/>";
}
id:kt26

ご丁寧にありがとうございます。

少々私には複雑に感じられましたが、テストしながら試してみます。

2007/03/10 16:15:16

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

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

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

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

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません