PHPデータベース切り替えの問題、オンラインなど

WBOY
リリース: 2016-06-23 14:19:47
オリジナル
1355 人が閲覧しました

PHP データベース業界データ

RT、私の目的は、1 か所のデータベース リンクを変更し、他のページをクエリするときに新しいリンクを使用することです。 。
ここで、デフォルトのリンクを使用してクエリ ページ tttt.php を入力します。クエリ データは 3 です。
次に、ページのドロップダウン ボックスから他の領域を選択します。ドロップダウン ボックスを選択するときに、ajax を使用して、バックグラウンドからデータベースリンク
この時、再度クエリページttt.phpに入りますが、データは前のDBのデータのままですので解決してください。 。 。

切り替える各リージョンの DB をリストすることに加えて、他に良い方法はありますか? (領域が動的に追加されるため)
require_once dirname(__FILE__).'/../common/DbSingleHelper.php';	require_once dirname(__FILE__).'/../svr_yunwei_config.php';	$dbsingleHelper = DBSingleHelper::singleton();	$sql = 'select count(*) as ct from login_log';	$res = $dbsingleHelper -> doSql($sql);	echo "查出来的条数:".$res[0]['ct']."<br/>";	//$dbsingleHelper -> changeDbLink("xxxx", "xxx", "xxx", "xxx");	//$r = $dbsingleHelper -> doSql($sql);	//echo "新条数:".$r[0]['ct'];
ログイン後にコピー

上記のコードでは、コメントをオンにするのは正しいですが、問題は、別のページでスイッチがトリガーされた後、別のページで切り替えアクションがトリガーされることです。このクエリの結果は、以前の DB のデータのままです。 。 。
これは、ある場所でデータベースを切り替えた後は、すべてのページの他の場所を変更できないことを意味します。 。 。シングルカラムを使ってもうまくいきません
アドバイスをお願いします。 。 。


ディスカッションへの返信(解決策)

受信データベース条件も選択データベースも表示されません

受信データベース条件も選択データベースも表示されません

public function changeDbLink($server, $user, $pwd, $db_name)        {            mysql_close(self::$m_con);            return $this -> getConnection($server, $user, $pwd, $db_name);        }                public function killConnetion()        {            mysql_close(self::$m_con);        }				//单列方法		public static function singleton()		{			if(!isset(self::$m_instance))			{				$cls = __CLASS__;				self::$m_instance = new $cls;			}			return self::$m_instance;		} private function getConnection($server = DB_SERVER, $user = DB_USERID, $pwd = DB_PASSWORD, $db_name = DB_CATALOG)        {            self::$m_con = mysql_connect($server, $user, $pwd);            if(self::$m_con == false)                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                {                ErrorLog::saveLog("db connection falid!server:".$server.", user:".$user.", password:".$pwd);                exit;            }                        $db_sel = mysql_select_db($db_name);            if($db_sel == false)            {                ErrorLog::saveLog("db can't select database".$dbname);                exit;            }            mysql_query("set names utf8");            return self::$m_con;        } public function doSql($sql)        {            $data_list = array();            $res = $this -> Excute($sql);            $i = 0;            while($row = mysql_fetch_array($res))            {                $data_list[$i] = $row;                $i++;            }            return $data_list;                       }
ログイン後にコピー

私は切り替え時、クラスで選択されていますただし、クエリを実行する場合は、現在のページでchangeDbLinkが呼び出されない場合でも、結果はスイッチがない場合と同じになります

changeDbLinkが呼び出されない場合は、もちろん実行できません。データベース

当然、changeDbLink を呼び出さなければ、データベースを他の場所で呼び出すことはできません。 ? ?

同じ接続でクエリの前である限り、どこでも呼び出すことができます

同じ接続でクエリの前である限り、どこでも呼び出すことができます
私はそれをテストしに行きましたmysql_connect の戻り値

self::$m_con = mysql_connect($server, $user, $pwd);var_dump(self::$m_con);
ログイン後にコピー

このうち、$m_con は db クラスの静的変数であり、var_dump の値は各クエリでも使用されます。 。
最初にクエリ ページ tttt.php を実行して、タイプ (mysql リンク) の resource(6) の結果を表示します。見つかったアイテムの数: 5 (クエリ中の var_dump $m_con の値)
次に、切り替えるページ dbchange.php を実行します。 DBLINK は、タイプ (mysql リンク) のリソース (7) を表示します (再構築されたリンクによって出力される $m_con の値)
次に、tttt.php を再度実行すると、結果はタイプ (mysql リンク) のリソース (6) のままですが、なぜですか?
tttt.php コード
require_once dirname(__FILE__).'/../common/DbSingleHelper.php';	require_once dirname(__FILE__).'/../svr_yunwei_config.php';	$dbsingleHelper = DBSingleHelper::singleton();	$sql = 'select count(*) as ct from login_log';	$res = $dbsingleHelper -> doSql($sql);	echo "查出来的条数:".$res[0]['ct']."<br/>";
ログイン後にコピー

Changedb.php コード
$dbsingleHelper = DBSingleHelper::singleton();	$site = $_REQUEST['site'];		$ip = $svr_url[$site]["url"];	if(substr($ip, 0, 4) == "http")	{		$ip = substr($ip, 7);	}	$dbname = "yunwei".$site;		$flag = $dbsingleHelper -> changeDbLink($ip.":xx", "xxx", "xxx", $dbname);
ログイン後にコピー

シングルトンを使用していないことがわかりましたか? ? ? ? ? ?
両方のページで $dbsingleHelper = DBSingleHelper::singleton() を使用していますが、両方にフラグが立てられていますか? ?

public static function singleton()		{			if(!isset(self::$m_instance))			{				echo "ssssssssssssssssssssssssssss";				$cls = __CLASS__;				self::$m_instance = new $cls;			}			return self::$m_instance;		}
ログイン後にコピー

情報を確認したところ、PHP 変数はすべてページ レベルであり、ページが再構築のために呼び出されるたびに、ページの実行後にメモリがクリアされると記載されています。同じリンクですか?

2 ページ URL 経由でディスパッチされた場合、同じ接続を使用することはできません
プログラムが終了し、データベースが閉じられます

ただし、シリアル化を通じて 2 ページ間でオブジェクトのシーンを転送できます

2 ページの場合URL 経由でディスパッチされるため、それは不可能です 同じ接続を使用します
プログラムが終了すると、データベースは閉じられます

しかし、シリアル化を通じて 2 ページ間でオブジェクトを転送する方法のサンプルを教えていただけますか?よく分かりません。 。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート