 |
PHP Yii framework ทำไงให้สามารถ เลือก select dynamic Database ได้หลายตัวอะครับ |
|
 |
|
|
 |
 |
|
แจ้ง v. ที่ใช้งานด้วยครับ
ถ้าเป็น v.2 จะอยู่ที่
config/web.php
กำหนด
Code (PHP)
'db' => require(__DIR__ . '/db.php'),
'db2' => require(__DIR__ . '/db2.php'),
เรียกใช้ก็
Code (PHP)
Yii::$app->db;
Yii::$app->db2;
|
 |
 |
 |
 |
Date :
2015-07-24 14:40:19 |
By :
CasanovaKung |
|
 |
 |
 |
 |
|
|
 |
 |
|
 |
 |
 |
|
|
 |
 |
|
ผมใช้ Yii v1 ครับ ตอนนี้ผมเรียกใช้ใน config/main ครับ อยู่ใน array components
อันนี้คือการ connect 2 db แบบ fix ผมเลยจะแก้ให้เป็นแบบ dynamic เลือกเอาอะครับ
Code (PHP)
'db' => array(
'connectionString' => 'sqlsrv:Server=127.0.0.1;Database=test;',
'username' => 'sa',
'password' => 'test',
'charset' => 'utf8',
),
'db2' => array(
'connectionString' => 'sqlsrv:Server=127.0.0.1;Database=test2;',
'username' => 'sa',
'password' => 'test',
'charset' => 'utf8',
'class' => 'CDbConnection'
),
|
 |
 |
 |
 |
Date :
2015-07-24 14:50:37 |
By :
mhbank |
|
 |
 |
 |
 |
|
|
 |
 |
|
 |
 |
 |
|
|
 |
 |
|
ใช้ query แบบไหนครับ
Code (PHP)
$query = $connection->createCommand("SELECT * FROM xxxx");
$result = $query->queryAll();
// หรือ?
$result = $model->find();
|
 |
 |
 |
 |
Date :
2015-07-24 15:14:11 |
By :
CasanovaKung |
|
 |
 |
 |
 |
|
|
 |
 |
|
 |
 |
 |
|
|
 |
 |
|
ผมใช้แบบนี้ครับ
Code (PHP)
$query = Yii::app()->db->createCommand(select * from xxx);
หรือ
$query = Yii::app()->db2->createCommand(select * from xxx);
$result = $query->queryAll();
|
ประวัติการแก้ไข 2015-07-24 15:26:02
 |
 |
 |
 |
Date :
2015-07-24 15:22:24 |
By :
mhbank |
|
 |
 |
 |
 |
|
|
 |
 |
|
 |
 |
 |
|
|
 |
 |
|
แล้ว dynamic ที่ต้องการนี่
หมายถึง
Code (PHP)
<select id="database">
<option value="1">Database 1</option>
<option value="2">Database 2</option>
</select>
|
 |
 |
 |
 |
Date :
2015-07-24 15:47:38 |
By :
CasanovaKung |
|
 |
 |
 |
 |
|
|
 |
 |
|
 |
 |
 |
|
|
 |
 |
|
ใช้ครับเพราะแบบผมมัน fix กรณีที่ user มีข้อมูล backup ไว้ชื่อมันสามารถดิ้นได้ครับว่าจะชื่ออะไร เช่น db test20150724
ผมเลยหาวิธีที่จะไม่ต้องมาสร้าง db3 db4 db5 ครับ
เลยจะให้มัน select db เอง แล้วลูกค้าเลือกว่าจะเอา db ตัวไหนไหนใน dropdownlist นั้นละครับ แล้วก็เอาค่าไปส่งให้มันใน
config db ครับ
Code (PHP)
$query = Yii::app()->db->createCommand(select name from master..sysdatabases where name like 'test%');
$re = $query -> queryAll();
$str = "<select id="database">";
$i=1;
foreach($re as $reall){
$str += "<option value=$i>$reall['name']</option>"
$i++;
}
$str += "</select>";
echo $str;
ให้เค้าเลือกประมาณนี้อะครับ
แล้วถ้า user เลือกค่า อะไรก็เก็บไว้ในตัวแปรหนึ่ง แล้วเอาไปใส่เป็นชื่อ DB แต่ผมไม่รู้วิธีส่งค่ากลับไปใช้อะครับ
|
 |
 |
 |
 |
Date :
2015-07-24 16:19:32 |
By :
mhbank |
|
 |
 |
 |
 |
|
|
 |
 |
|
 |
 |
 |
|
|
 |
 |
|
ลองใช้หลักการแบบนี้ดู
Code (PHP)
class Mainbase
{
public $db = [
'host' => 'localhost',
'user' => 'ckung',
'pass' => '123!@#',
// 'base' => 'pd_001',
];
public $connect;
public function __construct()
{
$host = $this->db['host'];
$user = $this->db['user'];
$pass = $this->db['pass'];
// $db = $this->db['base'];
try {
// $this->connect = new PDO("mysql:host={$host};dbname={$db}", $user, $pass);
$this->connect = new PDO("mysql:host={$host};", $user, $pass);
}
catch (Exception $e) {
$this->connect = die("Unable to connect: " . $e->getMessage());
}
}
public function query($sql)
{
$output = [];
if(is_array($sql)){
try {
$dbh = $this->connect;
$dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$dbh->beginTransaction();
foreach($sql as $sql){
$dbh->exec($sql);
}
$dbh->commit();
$output[0] = true;
}
catch (Exception $e){
$dbh->rollback();
$output[0] = false;
$output[1] = $e->getMessage();
}
}
return $output;
}
public function select($sql)
{
$output = [];
if(is_array($sql)){
try {
$dbh = $this->connect;
$dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$output[1] = [];
foreach($sql as $sql){
$command = $dbh->query($sql);
$result = $command->fetchAll();
$output[1][] = $result;
}
$output[0] = true;
}
catch (Exception $e){
$output[0] = false;
$output[1] = $e->getMessage();
}
}
return $output;
}
}
$baseapp = new Mainbase;
$baseapp->query(["use pd_006;"]);
$data = $baseapp->select([
"SELECT * FROM province",
]);
print_r($data[1]);
ลองวิเคราะห์ดูครับ
|
 |
 |
 |
 |
Date :
2015-07-24 16:52:33 |
By :
CasanovaKung |
|
 |
 |
 |
 |
|
|
 |
 |
|
 |
 |
 |
|
|
 |
 |
|
ขอบคุณครับเดี๋ยวจะลองเอาไปประยุกใช้ดูครับ
|
ประวัติการแก้ไข 2015-07-24 17:08:37
 |
 |
 |
 |
Date :
2015-07-24 17:07:53 |
By :
mhbank |
|
 |
 |
 |
 |
|
|
 |
 |
|
 |
 |
|
|