OK、私と同様の質問がいくつかありますが、それらの例はすべて PHP クラスを使用しています...私のものは使用しません。多分それが問題ですか?この時点で私のサイトは非常に単純なので、クラスは必要ありません。
とにかく、PDO を使用して MySQL データベースに接続しようとしています。というファイルでデータベースに接続し、config.php
このファイルをindex.php
withに含めます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
その後、自分の関数にパラメーターとして渡すことができました。出来上がりです。