영카트 다중DB연결해서 상품등록시

영카트 다중DB연결해서 상품등록시

QA

영카트 다중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 _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 _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

두번씩 실행 하셔야 할것 같습니다. 

goods_form_update.php에
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'");
}
이 부분이 디비에 인서트 / 업데이트 하는 부분같은데 이 부분을 어떻게
수정해야 새로 추가한 디비에 들어갈까요?;;;

일단 insert 함수가 어떻게 구성되어있는지 찾아보셔야 할것 같습니다.
그걸 두개씩 만들지 균이님처럼 파라메터를 추가해서 할지는 결정하시면 될것 같아요.

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)라는 기능이 있습니다

 

감사합니다. 덕분에 잘 진행이 되고 있습니다. 등록 수정 삭제는 이상없이 동시에 작업이 됩니다만 마지막 문제가 있네요;;;;;메인쇼핑몰에 상품을 등록할때 이미지를 등록하면 메인에는 이미지가 업로드 잘되는데 두번쨰 쇼핑몰에 업로드가 안되고 있습니다. 그래서 그냥 이미지 업로드는 메인에다만 올리고 두번째 쇼핑몰은 이미지 경로를 소스 수정으로 메인쇼핑몰 경로를 사용할까 하는데 두번째 쇼핑몰 디비에 파일명이 저장이 안되네요;;; 파일명만 저장이 된다면 소스를 메인쇼핑몰로 잡아서 같은 이미지를 사용하면 될 것 같은데 왜 파일명이 저장이 안될까요;;;

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의 값이 모두 넘어가지가 않더라구요;;;; 방법이 없을까요;;

답변을 작성하시기 전에 로그인 해주세요.
전체 123,643 | RSS
QA 내용 검색

회원로그인

(주)에스아이알소프트 / 대표:홍석명 / (06211) 서울특별시 강남구 역삼동 707-34 한신인터밸리24 서관 1404호 / E-Mail: admin@sir.kr
사업자등록번호: 217-81-36347 / 통신판매업신고번호:2014-서울강남-02098호 / 개인정보보호책임자:김민섭(minsup@sir.kr)
© SIRSOFT