0

クラスコンストラクターへのadodb接続を通過しようとしていますが、そうすると次のエラーが発生します。

mysql_error(): supplied argument is not a valid MySQL-Link resource

したがって、コンテキストに入れるために、次のような新しい adodb 接続をインスタンス化しました。

// establish database connection
$db = ADONewConnection($dsn);
if (!$db) die(mysql_error());

次に、新しいユーザー アクセス オブジェクトを作成し、次のように adodb 接続を渡しました。

$user = new UserAccess($db);

これは、ユーザー アクセス クラスのコンストラクターです。

function UserAccess($oDbLink) {
   // check we have a valid connection
}

私が間違っていることはありますか?

ありがとう、ガズ

4

5 に答える 5

0

あなたが提供したコードの一部に明らかなエラーは見られないので、次のことをお勧めします。

  • 当分の間、オブジェクトを脇に置いておきます
  • に設定error_reporting()しますE_ALL
  • のパラメーターを再確認してください$dsn- コマンドラインから接続を試みることができます...
  • アクセス権限を確認し、FLUSH PRIVILEGES を実行します
  • で ADODb デバッグを有効にする$db->debug = TRUE;
  • オブジェクトの外側から物事をテストする$db->Execute("SELECT * FROM tablename") or die($db->ErrorMsg());

接続リソースが有効なリンクではないというメッセージが表示された場合は、通常はそうです。データベースが実際にそこにあり、実行されていることを確認することを忘れないでください。

于 2009-12-13T20:58:58.713 に答える
0

$db問題は、取得したオブジェクトで PHP の mysql_* 関数を使用しようとしている可能性が最も高いですADONewConnection。これは mysql ハンドルではないため、これらの関数では機能しません。adodb 独自のものを使用する必要があります。

于 2009-12-13T21:00:23.200 に答える
0

あなたが提供したものから、コードに問題はありません。もっといっぱいのものを提供すれば、助けになるかもしれません。

ADODB 接続を渡す本当の理由はありますか? 本当の理由もなく、どこにでも渡され、より多くの作業が必要になるだけです...私はそれをするのをためらっています。標準のグローバルでさえも優れている可能性があります(はい、グローバルは悪です)またはおそらくシングルトンクラスですか?

于 2009-12-21T23:21:27.180 に答える
0

ご回答ありがとうございます。 $dsn 変数を削除し、 $_GLOBAL 変数を渡すだけで、これを機能させることができました

于 2010-01-31T12:04:53.503 に答える
0

コードは次のようになります。

// establish database connection
$db = ADONewConnection($dsn);
if ( ! $db )
{
  // just display error message
  // you cannot use mysql_error, since you haven't connected to any database
  die ("Cannot connect, check the parameter and make sure db is running!");
}

オブジェクトのコピーを避けるためのユーザー参照

function UserAccess(&$oDbLink) {
 // check we have a valid connection
}

それが役立つことを願っています。

于 2010-01-31T05:00:21.323 に答える