영카트 다중DB연결해서 상품등록시
본문
안녕하세요.
제가 지금 영카트로 쇼핑몰 두개를 만들어서 한 군데를 메인으로 삼아
메인쇼핑몰에 상품을 등록하거나 삭제, 수정하면 다른 한 곳의 쇼핑몰에도
같이 반영이 되도록 하려고 합니다.
dbconfig.php에
<?php
define('TB_MYSQL_HOST', 'localhost');
define('TB_MYSQL_USER', 'xxxx1);
define('TB_MYSQL_PASSWORD', '12345678');
define('TB_MYSQL_DB', 'xxxx1');
define('TB_MYSQL_SET_MODE', false);
define('TB_MYSQL_HOST2', 'localhost');
define('TB_MYSQL_USER2', 'xxxx2');
define('TB_MYSQL_PASSWORD2', '12345678');
define('TB_MYSQL_DB2', 'xxxx2');
define('TB_MYSQL_SET_MODE2', false);
?>
이렇게 2들을 추가시키고
common.php를
$connect_db = sql_connect(TB_MYSQL_HOST, TB_MYSQL_USER, TB_MYSQL_PASSWORD) or die('MySQL Connect Error!!!');
$select_db = sql_select_db(TB_MYSQL_DB, $connect_db) or die('MySQL DB Error!!!');
$connect_db2 = sql_connect2(TB_MYSQL_HOST2, TB_MYSQL_USER2, TB_MYSQL_PASSWORD2) or die('MySQL Connect Error!!!');
$select_db2 = sql_select_db2(TB_MYSQL_DB2, $connect_db2) or die('MySQL DB Error!!!');
// mysql connect resource $tb 배열에 저장 - 명랑폐인님 제안
$tb['connect_db'] = $connect_db;
$tb['connect_db2'] = $connect_db2;
요렇게 수정을 했습니다.
global.lib.php에는
// DB 연결
function sql_connect($host, $user, $pass, $db=TB_MYSQL_DB)
{
if(function_exists('mysqli_connect') && TB_MYSQLI_USE) {
$link = mysqli_connect($host, $user, $pass, $db);
// 연결 오류 발생 시 스크립트 종료
if(mysqli_connect_errno()) {
die('Connect Error: '.mysqli_connect_error());
}
} else {
$link = mysql_connect($host, $user, $pass);
}
return $link;
}
function sql_connect2($host2, $user2, $pass2, $db2=TB_MYSQL_DB2)
{
if(function_exists('mysqli_connect') && TB_MYSQLI_USE) {
$link2 = mysqli_connect($host2, $user2, $pass2, $db2);
// 연결 오류 발생 시 스크립트 종료
if(mysqli_connect_errno()) {
die('Connect Error: '.mysqli_connect_error());
}
} else {
$link2 = mysql_connect($host2, $user2, $pass2);
}
return $link2;
}
// DB 선택
function sql_select_db($db, $connect)
{
if(function_exists('mysqli_select_db') && TB_MYSQLI_USE)
return @mysqli_select_db($connect, $db);
else
return @mysql_select_db($db, $connect);
}
// DB 선택
function sql_select_db2($db, $connect)
{
if(function_exists('mysqli_select_db') && TB_MYSQLI_USE)
return @mysqli_select_db($connect, $db);
else
return @mysql_select_db($db, $connect);
}
요렇게 해주었습니다.
문제는 상품등록시 admin/goods/goods_form_update.php에서 뭘 해줘야
동시에 등록 수정 삭제가 가능한지 감이 잘 잡히지 않습니다.
sql_query들을 다른것으로 한 번 더 해주면 되나요? sql_query를 다른 디비용으로
어떻게 사용을 해야될지도 잘 모르겠네요;;;;;
global.lib.php에 insert를 다른디비용으로 2로 만들어서 그것도 넣으면 될 것 같기도 하고요;;;
근데 이 insert를 다른 디비용으로 어떻게 구분을 할지 좀 막힙니다...
답변 2
global.lib.php 안에서
function sql_query 도 두개씩 하셔야 하고..
admin/goods/goods_form_update.php 안에 insert, update 쿼리도
sql_query
sql_query2
두번씩 실행 하셔야 할것 같습니다.
그누보드 및 영카트에서 사용하는 방식이 아닌데 저렇게 질문하면 내용을 알 수가 없습니다
추측하자면 insert("shop_goods", $value); 여기에서 저장하는 쿼리문이 생행될 것이고
그곳에서 mysql_query문을 실행할 때
위에서 설정한 $tb['connect_db'] (그누보드에서는 $g5['connect_db'])를 사용해서 실행 되도록 해야죠
insert()함수가 어떻게 만들어져 있는지 모르겠으나
insert("shop_goods", $value, $tb['connect_db']);
insert("shop_goods", $value, $tb['connect_db2']);
이렇게 호출하면 두개의 디비에 각각 저장 되도록 insert()함수를 고치면 됩니다
그런데 두번째 디비는 다른 서버가 아니고 같은 서버에 있는 것인가요?
define('TB_MYSQL_HOST2', 'localhost');라고 되어잇으니....
참고로 조금 고급스런 방법이긴한데 한쪽 테이블에서 입력/수정/삭제가 이루어지면 다른 테이블에서도
같은 동작이 수행되도록 해주는 프로시져(procedure)라는 기능이 있습니다