영카트 다중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
두번씩 실행 하셔야 할것 같습니다.
답변에 대한 댓글 3개
그걸 두개씩 만들지 균이님처럼 파라메터를 추가해서 할지는 결정하시면 될것 같아요.
update 문도 마찬가지로 해주셔야 합니다.
delete 문도 있다면 추가해주세요~
if($_POST['simg_type']) { // URL 입력
$value['simg1'] = $_POST['simg1'];
$value['simg2'] = $_POST['simg2'];
$value['simg3'] = $_POST['simg3'];
$value['simg4'] = $_POST['simg4'];
$value['simg5'] = $_POST['simg5'];
$value['simg6'] = $_POST['simg6'];
} else {
for($i=1; $i<=6; $i++) {
if($img = $_FILES['simg'.$i]['name']) {
if(!preg_match("/\.(gif|jpg|png)$/i", $img)) {
alert("이미지가 gif, jpg, png 파일이 아닙니다.");
}
}
if($_POST['simg'.$i.'_del']) {
$upl->del($_POST['simg'.$i.'_del']);
$value['simg'.$i] = '';
}
if($_FILES['simg'.$i]['name']) {
//$value['simg'.$i] = $upl->upload($_FILES['simg'.$i]);
}
}
}
이렇게 두 번쩨 쇼핑몰에 이미지 등록되는 부분은 업로드 부분을 주석처리하여 업로드 되는걸 막았는데요.....디비에 파일명까지 안들어가네요;;;;insert쿼리를 보니 simg1~simg6의 값이 모두 넘어가지가 않더라구요;;;; 방법이 없을까요;;
댓글을 작성하려면 로그인이 필요합니다.
그누보드 및 영카트에서 사용하는 방식이 아닌데 저렇게 질문하면 내용을 알 수가 없습니다
추측하자면 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)라는 기능이 있습니다
답변에 대한 댓글 1개
if($_POST['simg_type']) { // URL 입력
$value['simg1'] = $_POST['simg1'];
$value['simg2'] = $_POST['simg2'];
$value['simg3'] = $_POST['simg3'];
$value['simg4'] = $_POST['simg4'];
$value['simg5'] = $_POST['simg5'];
$value['simg6'] = $_POST['simg6'];
} else {
for($i=1; $i<=6; $i++) {
if($img = $_FILES['simg'.$i]['name']) {
if(!preg_match("/\.(gif|jpg|png)$/i", $img)) {
alert("이미지가 gif, jpg, png 파일이 아닙니다.");
}
}
if($_POST['simg'.$i.'_del']) {
$upl->del($_POST['simg'.$i.'_del']);
$value['simg'.$i] = '';
}
if($_FILES['simg'.$i]['name']) {
//$value['simg'.$i] = $upl->upload($_FILES['simg'.$i]);
}
}
}
이렇게 두 번쩨 쇼핑몰에 이미지 등록되는 부분은 업로드 부분을 주석처리하여 업로드 되는걸 막았는데요.....디비에 파일명까지 안들어가네요;;;;insert쿼리를 보니 simg1~simg6의 값이 모두 넘어가지가 않더라구요;;;; 방법이 없을까요;;
댓글을 작성하려면 로그인이 필요합니다.
답변을 작성하려면 로그인이 필요합니다.
로그인
if($w == "") {
$value['gcode'] = $_POST['gcode']; //상품코드
$value['reg_time'] = TB_TIME_YMDHIS; //등록일시
insert("shop_goods", $value);
$gs_id = sql_insert_id();
} else if($w == "u") {
update("shop_goods", $value," where index_no = '$gs_id'");
}
이 부분이 디비에 인서트 / 업데이트 하는 부분같은데 이 부분을 어떻게
수정해야 새로 추가한 디비에 들어갈까요?;;;