0

多くの投稿を読んだ後、これを実行していない場合は、誰かがこれを手伝ってくれるかもしれません。

データベースからの情報を index.php にクラップする PHP (Module.php) ファイルを含めようとしています。この index.php には、データベース接続を含むファイルも含まれています。問題は、db selects を処理するインクルード ファイルが PDO オブジェクトを認識していないようで、スクリプトが次のエラーで停止することです。

Fatal error: Call to a member function prepare() on a non-object in 

PDO オブジェクトをグローバルにしようとしました。しかし、残念ながらこれは機能していません。

助けてくれてありがとう(そして私が夢中にならないように安全に...)

トニー

index.php

//DB Connection
require_once ("include/db_connect_inc.php");

$request = $_GET['Controll'];

switch ($request) {
case 0:
    echo "XY";
    break;
case 1:
    global $objDb;

//This file should be able to use the DB Object
    include("modules/Eat/Module.php");
    break; 

}

Module.php

global $objDb;

    $dbSelect = $objDb->prepare(
    "SELECT DISTINCT ON (nummer) nummer
    FROM tableX
    "  
);

$dbSelect->execute();

while($row = $dbSelect->fetch(PDO::FETCH_ASSOC)) { 
$all = $row['nummer'];
}
echo "1 - " . $all;

db_connect_inc.php

$strDbLocation = 'pgsql:host=localhost;dbname=test';
$strDbUser = 'root';
$strDbPassword = 'root';

try{
    $objDb = new PDO($strDbLocation, $strDbUser, $strDbPassword);
    $objDb->setAttribute(PDO::ATTR_EMULATE_PREPARES, false);
    $objDb->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
    global $objDb;
}
catch (PDOException $e){
    //echo 'Fehler beim Öffnen der Datenbank: ' . $e->getMessage();
       print "Error!: " . $e->getMessage() . "<br/>";
}
4

1 に答える 1

1

関数を使用していないように見えるため、変数は既にグローバルスコープに設定されているため、すべてのglobal $objDb;行を削除する必要があります。

データベースに接続する最初の 3 行にエラーがない限り、問題は解決するはずです。

それとは別に、OOP /クラスを使用し、依存性注入を使用して、Moduleクラスに必要なもの(この場合はdb接続)が常に提供されるようにします。

于 2012-08-15T14:08:56.427 に答える