私が取り組んでいるサイトでは、すべてのサイト コンテンツが 1 つの mysql データベースに含まれています。私は最近、訪問者が制限されたコンテンツにアクセスできるように登録する機能を追加しました。これには、登録、パスワードの変更、紛失したパスワードの取得などが含まれます。訪問者には選択、挿入、および更新の権限が必要になるため、サイト DB 全体で見知らぬ訪問者にそれらの権限を付与することに懸念があったため、作成することにしました。外部ユーザー用の別の DB。
登録、アクティベーション、パスワードの変更、パスワードの取得など、すべてがうまく機能しています。問題は、一般的なサイト コンテンツの同じ管理領域内から ext_users DB にアクセスしようとしているが、開発サーバー (MAMP Pro 2.1.1、Apache 2.2.22、mysql 5.5.25、 php 5.4.4) 私のライブサーバーにはありません (centos 5.9 i686 virtuozzo – vps、Apache 2.2.21、mysql 5.0.96、php 5.?) これが私がしたことです。
それぞれ独自の変数を持つ 2 つの接続スクリプトを作成し、admin.php でそれぞれに対して require_once() を実行しました。この最初のものは、一般的なサイト DB に対するものです。
$hostname_siteadmin = "localhost";
$database_siteadmin = "generalsiteDB";
$username_siteadmin = "generalsiteUSER";
$password_siteadmin = "generalsitePWD";
$siteadmin = mysql_pconnect($hostname_siteadmin, $username_siteadmin, $password_siteadmin) or trigger_error(mysql_error(),E_USER_ERROR);
2 つ目は、外部ユーザー DB に対するものです。
$hostname_vusradmin = "localhost";
$database_vusradmin = "extusersiteDB";
$username_vusradmin = "extusersiteUSER";
$password_vusradmin = "extusersitePWD";
$vusradmin = mysql_pconnect($hostname_vusradmin, $username_vusradmin, $password_vusradmin) or trigger_error(mysql_error(),E_USER_ERROR);
前述したように、私のテスト サーバーでは問題なく動作しますが、運用サーバーでは最後に読み込まれた接続スクリプトのみが動作します。これは変数の競合を示しているように見えますが、変数は上記のように接続スクリプトごとに異なります。登録済みユーザーを表示しようとすると、エラー処理スクリプトが次のエラーを返します。
mysql_num_rows(): supplied argument is not a valid MySQL result resource
この mysql クエリの最後の行である行 33 を指しています。
mysql_select_db($database_vusradmin, $vusradmin);
$query = "SELECT user_id FROM ext_users";
$result = mysql_query($query);
$totalrecords = mysql_num_rows($result);
エラー処理スクリプトの出力を表示すると、2 つの異なる接続変数があり、それぞれにリソース ID が割り当てられています。各接続のユーザー名とパスワードも表示されますが、どちらも正しいです。33 行目のエラーは、クエリが何も生成していないことを示しているようです。これは、エラー メッセージの内容によって裏付けられています。
[query] => SELECT user_id FROM ext_users
[result] =>
結果は空です。
要約すると、これは開発サーバーでは完全に機能しますが、運用サーバーでは機能しません。エラー レポートには、両方の接続が行われており、それぞれが正しいユーザー名とパスワードを持っていることが示されています。個別のリソース ID が各接続に割り当てられていますが、ext_users との最初の DB 対話である Select クエリは失敗します。接続スクリプトの値をライブ サーバーの値と合わせてチェック、ダブル チェック、トリプル チェックしましたが、すべて正しい値です。ライブ サーバー上で選択、挿入、更新、および削除の権限を持つ DB ユーザー vuseradm がいます。これは何ですか?これに影響を与える可能性のあるサーバー設定はありますか?
役立つ提案は大歓迎です。
解決済み
接続スクリプトと mysql_select_db およびクエリの両方を再作成しましたが、今では問題なく動作しています。元のバージョンと新しいバージョンの違いはまだわかりませんが、気にしないでください。今は問題なく動作しています。
些細な事でイライラする事で皆様にご迷惑をおかけして申し訳ありません。回答してくれたすべての人に感謝します。