PDA

View Full Version : سوال: اتصال همزمان چند دیتابیس در php



alnaz20
دوشنبه 09 شهریور 1394, 11:50 صبح
سلام
چندتا دیتابیس دارم،میخام بطور همزمان اطلاعات تمامی جداول دیتابیس ها را در یک جدول نمایش بدم .
چطور این کار رو انجام بدم؟؟؟(با pdo نه mysql)
لطفا راهنمایی کنید!!!

arta.nasiri
دوشنبه 09 شهریور 1394, 13:22 عصر
واسه هر دیتابیس یک کانکشن بزنید بعد queryهای مد نظرتون رو اجرا کنید آخر سر هم نتایج بدست اومده رو merge کنید و تو یه جدول نمایش بدید.

morteza_naderloo
دوشنبه 09 شهریور 1394, 13:56 عصر
با سلام
قبل از هر چیز بگم بنده زیاد وارد نیستم اما برای کارهای خودم به این شکل استفاده میکنم و تا الان هم به مشکلی نخوردم

ابتدا یک کلاس بساز ، کدهای پایین


class Database {
protected $setting;
protected $result;
public $db;
public function __construct($setting){
$this->setting=$setting;
$this->db_connect();
$this->db_character_encoding();
}

function __destruct(){
$this->db->close();
}

protected function db_connect(){
$this->db=new mysqli('localhost',$this->setting['db_username'],$this->setting['db_password'],$this->setting['db_name']);
}
protected function db_character_encoding(){
$this->db->query('SET NAMES "'.$this->setting['db_character_encoding'].'"');
}

public function clean_input($source,$mode=1){
switch($mode){
case 1;
$source=htmlspecialchars(trim(strip_tags($source)) );
break;
case 2;
$source=htmlspecialchars(trim($source));
break;
}
$source=htmlspecialchars(trim($source));
if(! get_magic_quotes_gpc()) {
$source = addslashes($source);
}
return $this->db->real_escape_string($source);
}

}


بعد برای اتصال نیاز به متغییرهای زیر داری
یعنی قبل از فراخوانی کلاس باید ساخته بشن



$setting['db_username']='root';
$setting['db_password']='';
$setting['db_name']='edit';
$setting['db_character_encoding']='utf8';


و بعد کلاسو فراخوانی کن


$db=new Database($setting);


حالا هر جا خواستی میتونی فقط آرایه setting مقادیرشو تغییر بدی

مثلا



$setting['db_username']='root';
$setting['db_password']='';
$setting['db_name']='db1';
$setting['db_character_encoding']='utf8';

$db1=new Database($setting);


و



$setting['db_username']='root';
$setting['db_password']='';
$setting['db_name']='db1';
$setting['db_character_encoding']='utf8';

$db2=new Database($setting);


اینم کد استفاده از کلاس برای نمایش تمام جداول در یک دیتابیس




$result=$db->db->query('show tables');
while($rows=$result->fetch_assoc()){
print_r($rows);
}


اگر مشکلی بود بگو که توضیح بدم برات

alnaz20
سه شنبه 10 شهریور 1394, 12:01 عصر
برای هر دیتابیس یک کانکشن جداگانه دارم .
حالا چند تا سوال :
چطور همه کانکشن ها را بطور همزمان فراخوانی کنم؟؟
چگونه اطلاعات جداول مختلف در دیتابیس های مختلف بطور همزمان نمایش بدم؟؟
چگونه merge را انجام بدم؟؟
با تشکر!!!!!!!!

morteza_naderloo
سه شنبه 10 شهریور 1394, 12:53 عصر
با سلام
با توجه به کدهای بالای که برای شما قرار دادم
این راه رو میتونی استفاده کنی خودم امتحان کردم تمام اطلاعات دیتابیس و میتونی خروجی بگیری


<pre style="float:left;display:block;direction:ltr;text-align:left;">
<?php

$result=$db->db->query('SHOW DATABASES');
while($content=$result->fetch_assoc()){
$setting['db_username']='root';
$setting['db_password']='';
echo $setting['db_name']=$content['Database'];
echo '<br/>';
$setting['db_character_encoding']='utf8';
$$content['Database']=new Database($setting);
$resultTables=$$content['Database']->db->query('SHOW TABLES');
while($rows=$resultTables->fetch_assoc()){
echo $rows['Tables_in_'.trim($content['Database'])].'<br/>';
$resultDes=$$content['Database']->db->query('SELECT * FROM '.$rows['Tables_in_'.trim($content['Database'])]);
while($rowsdes=$resultDes->fetch_assoc()){
print_r($rowsdes);
}
}
}
?>
</pre>


فقط برای قالب بندی هم میتونی خودت از جدول استفاده کنی که اونم کار اسونیه
اگه مشکلی داشتی بگو راهنماییت کنم

morteza_naderloo
سه شنبه 10 شهریور 1394, 13:21 عصر
با سلام مجدد
دوست عزیز این هم با جدول بندی و به طور کامل
خیلی جالب شد تمام که شد خودم خیلی لذت بردم :لبخند:



<pre style="float:left;display:block;direction:ltr;text-align:left;">

<?php

$result=$db->db->query('SHOW DATABASES');
while($content=$result->fetch_assoc()){
$setting['db_username']='root';
$setting['db_password']='';
echo $setting['db_name']=$content['Database'];
echo '<br/>';
$setting['db_character_encoding']='utf8';
$$content['Database']=new Database($setting);
$resultTables=$$content['Database']->db->query('SHOW TABLES');
while($rows=$resultTables->fetch_assoc()){
echo $rows['Tables_in_'.trim($content['Database'])].'<br/>';
$resultDes=$$content['Database']->db->query('SELECT * FROM '.$rows['Tables_in_'.trim($content['Database'])]);
echo '<table cellpadding="1" cellspacing="1" border=1 >';
$i=1;
while($rowsdes=$resultDes->fetch_assoc()){

$head='<tr>';
$body='<tr>';
foreach ($rowsdes as $key => $val){
$head.='<td>'.$key.'</td>';
$body.='<td>'.$val.'</td>';
}
if($i==1){
echo $head.'</tr>';
}
echo $body.'</tr>';
$i++;
}
echo '</table>';

}
}
?>

</pre>

134818
فقط اگه به دردت خورد تشکر یادت نره