2

OK、私と同様の質問がいくつかありますが、それらの例はすべて PHP クラスを使用しています...私のものは使用しません。多分それが問題ですか?この時点で私のサイトは非常に単純なので、クラスは必要ありません。

とにかく、PDO を使用して MySQL データベースに接続しようとしています。というファイルでデータベースに接続し、config.phpこのファイルをindex.phpwithに含めますrequire_once()

という別のファイルからデータベースを正常に照会できますprocess.phpが、問題はそのファイル内の関数内にあります。私の DBO オブジェクトはその関数内の範囲外のようです。

関連するコード スニペットは次のとおりです。

index.php

require_once('./lib/config.php');

config.php

// tested and connects fine    
$pdo = new PDO('mysql:host=' . $hostname . ';dbname=' . $dbname, $username, $password, array(
    PDO::ATTR_PERSISTENT => true
));

プロセス.php

<?php
...
// can call $pdo fine in this file outside of functions
...

function authenticate($u, $p) {
    // can't call $pdo in here, error says $pdo is non-object
    $que = $pdo->query('select user_id, user_pass from users where user_name = \'' . $u . '\' limit 1');
    ...
}

?>

ちなみに、私は PDO で同様の問題を抱えていたので PDO を使用しておりmysqli、 から離れようとしてmysqlいます。

編集: この問題について得た応答の数に基づいて、最初に明確にする必要がありました: $pdo をパラメーターとして function に渡そうとしましたが、運もエラー メッセージも変わりませんでした。

解決策: どうやら問題はrequire_once('config.php')process.phpファイルにも追加する必要があったことです。理由はわかりません ( index.phpが最初に実行されたときに既に含まれていませんか?)。$pdoその後、自分の関数にパラメーターとして渡すことができました。出来上がりです。

4

3 に答える 3