2011-08-09 8 views
1

グローバル変数を置き換えようとしています。グローバルpdoオブジェクトなしでこの実行作業を行う

私のコードの小さな例:

# index.php: 

include "dbc.php"; 
echo cName(1); 

# dbc.php: 

try{ 
$connect = new PDO("mysql:host=".DB_HOST.";dbname=".DB_NAME.";charset:UTF8", DB_USER, DB_PASS, $driver_options); 
} 
catch(PDOException $pe) 
{ 
    die('Could connect to the database because: ' .$pe->getMessage()); 
} 
function cName($cID){ 
global $connect; 
$sql = $connect->prepare("SELECT name FROM cocos WHERE id=:id"); 
$sql->bindValue(":id", $cID); 
$sql->execute(); 
$sql = $sql->fetch(); 
return $sql["name"]; 
} 

あなたは私が$機能CNAME(内部でグローバル接続するのです見ることができるように)。それで、私は他のすべての機能にやります。本当に悪いですね。

私には何もしてもらえませんか?私はグローバル変数を持っていない場合は、未定義の関数を言う。私は、パラメータを追加することができます知っている

は、CNAME($接続し、1)

しかし、これは、私のために、他のようにずさんに見えます。そして、私は多くの機能を持っているので、私はいつもこの接続に追加のパラメータを含める必要があります。

私はこれについて何かできますか?余分なパラメータやグローバル変数はありませんか?

私は多分あなたがデータベースへのすべての通信を処理する1つの機能/クラス/オブジェクトを作ることができると思っていますが、どこから始めるべきか、どのようにすべきかはわかりません。

次のようになります。

dbQuery($ query);

ただし、bindValue()を指定することはできません。場合によっては、上記の例より複数の値をバインドする必要があります。

は本当に質問

+0

私の知る限り、それを避けることはできません。 – JMichelB

答えて

0

何については、PDOのインスタンスを返す静的メソッドを使用する場合は、コメントにお問い合わせください前方

のおかげで、このためのソリューションを望みますか?グローバル$接続と同じ1行があり、singletonの代わりにmultitonを使用する場合は、どのデータベースを使用するかを選択することができます。

2

私は、PHPで最高の平均であると言います。それは言った:

class Database 
{ 
    public $dbh; // handle of the db connexion 
    private static $dsn = 'mysql:host=localhost;dbname=DBNAME HERE'; 
    private static $user = 'DBUSERNAME HERE'; 
    private static $pass = 'PASSWORD HERE'; 


    public function factory() { 
     return $dbh = new PDO(self::$dsn,self::$user,self::$pass); 
    } 
} // end of Database Class 

次に、あなたの関数では、facotry()インスタンスを呼び出します。再び...助け

function cName($cID) 
{ 

    // call Database::factory, gives you access to methods and properties 
    $db= Database::factory(); 

    $sql = $db->prepare("SELECT first_name FROM users WHERE id=:id"); 
    $sql->bindValue(":id", $cID); 
    $sql->execute(); 
    $sql = $sql->fetch(); 

    // return the values 
    return $sql["first_name"]; 

} // end of cName function 

あなたはそれをよりモジュラー作りたかった場合は、など、簡単にconifgし、Databaseクラスを拡張することができ...

希望は、私は専門家ではありませんよ。

関連する問題